В настоящее время приведенный ниже цикл 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
,но я не вижу, как именно это сделать.