将sqlcmd输出文件发送到作为变量的目录

时间:2018-06-07 16:13:13

标签: batch-file sqlcmd

目前,批处理文件中的以下代码有效:它运行%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是文件名,但我不确定如何将其与路径变量集成。

1 个答案:

答案 0 :(得分:2)

迭代变量是%% S,修饰符~dpn强制评估驱动器路径和名称。

在这种情况下,您希望自己指定驱动器和路径,因此取决于wether %OUTPUTFOLDER%有一个尾部反斜杠

-o "%OUTPUTFOLDER%%%~nS"

或不使用:

-o "%OUTPUTFOLDER%\%%~nS"