目前,批处理文件中的以下代码有效:它运行%SCRIPTFOLDER%
中的所有SQL脚本,并将每个脚本的输出发送到与脚本相同的文件夹中的CSV。
FOR /F "tokens=*" %%S IN (
'DIR /B "%SCRIPTFOLDER%\*.sql" '
) DO (
sqlcmd -b -S %INSTANCE% -d %DATABASE% -i "%%~fS" -s "|" -o "%%~dpnS.csv" -W
IF ERRORLEVEL 1 GOTO errorhandling
ECHO %%~nS.csv successfully created
)
我想要做的是允许用户使用变量%OUTPUTFOLDER%指定生成的CSV的发送位置。
我尝试在%OUTPUTFOLDER%
内的不同位置放置%%~dpnS.csv
,这是一个完整路径,驱动器和文件夹(例如D:\ some folder \ output)。具体地,
%%~dp%OUTPUTFOLDER%nS.csv
和
%%~dpn%OUTPUTFOLDER%S.csv
但它们没有用,而且我(可能显然对你而言)在批处理文件语法方面非常不合适!
我理解dp
是驱动器和路径,S
是文件名,但我不确定如何将其与路径变量集成。
答案 0 :(得分:2)
迭代变量是%% S,修饰符~dpn
强制评估驱动器路径和名称。
在这种情况下,您希望自己指定驱动器和路径,因此取决于wether %OUTPUTFOLDER%
有一个尾部反斜杠
-o "%OUTPUTFOLDER%%%~nS"
或不使用:
-o "%OUTPUTFOLDER%\%%~nS"