【大至急】batファイルfor文ループ処理について

windowsバッチファイル入門サイト フォーラム Windowsバッチファイルに関する自由な掲示板 【大至急】batファイルfor文ループ処理について

このトピックには0件の返信が含まれ、1人の参加者がいます。5 年、 5 ヶ月前 社会人5年目 さんが最後の更新を行いました。

1件の投稿を表示中 - 1 - 1件目 (全1件中)
  • 投稿者
    投稿
  • #4867 返信

    社会人5年目

    恐れ入ります。お助け頂きたく投稿致しました。
    以下の処理でどうしてもバッチが落ちてしまいます。

    for /L %%L in (1,1,%ARRAY_INDEX%) do (
    の2度目のループ処理でおちてしまいます。
    原因が分からず困っています。
    以下の処理の2回目の変数設定で落ちてるようです。
    set CSVOUT_DATE=%ARCHIVE_DATE%
    rem echo !CSVOUT_DATE!
    set CSVOUT_TABLE=!TABLE[%%L]!
    rem echo !CSVOUT_TABLE!
    rem pause
    rem echo “loop”
    rem pause

    @echo off

    setlocal ENABLEDELAYEDEXPANSION
    set DB_SERVER=localhost
    set DB_NAME=imdb
    set DB_USER=sa
    set DB_PW=0055@
    set ARCHIVE_YEAR=%date:~0,4%
    set ARCHIVE_MONTH=%date:~-5,2%
    if “%date:~5,2%” LSS “04” (set /a ARCHIVE_YEAR=%ARCHIVE_YEAR%-2) else (set /a ARCHIVE_YEAR=%ARCHIVE_YEAR%)
    set ARCHIVE_DATE=%ARCHIVE_YEAR%/%ARCHIVE_MONTH%/01
    set DIR_NAME=%date:~-10,4%%date:~-5,2%%date:~-2,2%%time:~-11,2%%time:~-8,2%%time:~-5,2%
    SET ARRAY_INDEX=0
    SET INDEX=0
    SET A=0
    SET ZERO=0
    echo;

    if “%1” NEQ “” set ARCHIVE_DATE=%1

    mkdir c:\Arc\%DIR_NAME%

    echo %date% %time% :%ARCHIVE_DATE% >> c:\imart\Arc\%DIR_NAME%\trace.log
    echo %ARCHIVE_YEAR%
    echo %ARCHIVE_MONTH%
    echo %ARCHIVE_DATE%
    for /F %%I in (table.ini) do (
    set /a ARRAY_INDEX=!ARRAY_INDEX!+1
    set TABLE[!ARRAY_INDEX!]=%%I
    )
    echo %TABLE[1]%
    echo %TABLE[2]%
    echo %TABLE[3]%
    echo %TABLE[4]%
    echo %TABLE[5]%
    pause

    for /L %%L in (1,1,%ARRAY_INDEX%) do (
    set CSVOUT_DATE=%ARCHIVE_DATE%
    rem echo !CSVOUT_DATE!
    set CSVOUT_TABLE=!TABLE[%%L]!
    rem echo !CSVOUT_TABLE!
    rem pause
    rem echo “loop”
    rem pause
    :loop
    echo !TABLE[%%L]!
    rem echo !CSVOUT_DATE!
    rem echo !CSVOUT_DATE1!
    if “!CSVOUT_DATE1!” == “” (
    echo “出力1”
    set CSVOUT_DATE1=!CSVOUT_DATE!
    rem echo !CSVOUT_DATE1!
    )
    if “!CSVOUT_TABLE1!” == “” (
    echo “出力2”
    set CSVOUT_TABLE1=!CSVOUT_TABLE!
    echo %CSVOUT_TABLE1%
    )

    pause
    set YYYYMM=!CSVOUT_DATE1:~0,4!!CSVOUT_DATE1:~5,2!
    set YYYY=!CSVOUT_DATE1:~0,4!
    set MM=!CSVOUT_DATE1:~5,2!
    for /F %%A in (‘sqlcmd -Q “set nocount on;select count(*) from %DB_NAME%.dbo.!CSVOUT_TABLE1! where SUBSTRING(CONVERT(VARCHAR, [HISTORY_DT], 111), 1, 7) = SUBSTRING(CONVERT(VARCHAR, ‘!CSVOUT_DATE1!’, 111), 1, 7)” -U %DB_USER% -P %DB_PW% -S %DB_SERVER% -d %DB_NAME%’) do (
    set A=%%A
    )

    rem echo !A!
    rem echo !YYYYMM!
    rem echo !YYYY!
    rem echo !MM!

    if !A! gtr 0 (
    rem echo !A!
    bcp “select * from %DB_NAME%.dbo.!CSVOUT_TABLE1! where SUBSTRING(CONVERT(VARCHAR, [HISTORY_DT], 111), 1, 7)= SUBSTRING(CONVERT(VARCHAR, ‘!CSVOUT_DATE1!’, 111), 1, 7)” queryout c:\imart\Arc\%DIR_NAME%\!TABLE[%%L]!_!yyyy!!mm!.csv -c -t “,” -U %DB_USER% -P %DB_PW% >>c:\imart\Arc\%DIR_NAME%\trace.log
    set /a LASTMONTH=YYYYMM-1
    if !LASTMONTH:~-2!==00 set /a LASTMONTH+=12-100
    rem echo !LASTMONTH!
    set CSVOUT_DATE1=!LASTMONTH:~0,4!/!LASTMONTH:~4,2!/01
    rem echo !CSVOUT_DATE1!
    goto :loop
    ) else (
    echo “内側ループ”
    echo “0件”
    )

    echo “外側ループ”
    pause
    )
    endlocal
    :ERROR

1件の投稿を表示中 - 1 - 1件目 (全1件中)
返信先: 【大至急】batファイルfor文ループ処理について
あなたの情報: