windowsバッチファイル入門サイト › フォーラム › Windowsバッチファイルに関する自由な掲示板 › 【大至急】batファイルfor文ループ処理について
このトピックには0件の返信が含まれ、1人の参加者がいます。5 年、 5 ヶ月前に 社会人5年目 さんが最後の更新を行いました。
-
投稿者投稿
-
社会人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]%
pausefor /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 -
投稿者投稿