目前,下面的For / Do循环遍历与批处理文件本身在相同文件夹中的所有SQL文件,并将CSV输出到用户指定的文件夹(%OUTPUTFOLDER%
实际上是在批处理文件的早期创建的,作为%SCRIPTFOLDER%
的子文件夹,由用户指定):
FOR /F "tokens=*" %%S IN (
'DIR /B "%SCRIPTFOLDER%\*.sql" '
) DO (
echo Reading scripts from: %SCRIPTFOLDER%\*.sql
echo Script: %%~fS
echo Output: %OUTPUTFOLDER%\%%~nS.csv
sqlcmd -b -S %INSTANCE% -d %DATABASE% -i "%%~fS" -s "|" -o "%OUTPUTFOLDER%\%%~nS.csv" -W
IF ERRORLEVEL 1 GOTO errorhandling
ECHO %%~nS.csv successfully created
)
对于可视化示例,如果我有文件夹结构
C:\Extract\extract.bat
C:\Extract\Scripts\
C:\Extract\Output\
变量%SCRIPTFOLDER%
由用户设置,并且是您猜测它保存脚本的文件夹。但批处理文件也必须在该文件夹中。我需要更改它,以便脚本不必与批处理文件位于同一文件夹中。即用户可以指定%SCRIPTFOLDER%
和%OUTPUTFOLDER%
由于echo Script: %%fS
的输出,我猜这是我需要改变的东西 - 可能是FOR
行中的内容,但我不知道究竟是怎么做的。