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

Sending sqlcmd output file to directory that is a variable

目前,批处理文件中的以下代码有效:它运行 %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%,它是完整路径、驱动器和文件夹(例如 D:\some folder\output)放置在 %%~dpnS.csv 中的不同位置。具体来说,

%%~dp%OUTPUTFOLDER%nS.csv

%%~dpn%OUTPUTFOLDER%S.csv

但它们没有用,而且我(可能对你来说很明显)在批处理文件语法方面非常无能!

我知道 dp 是驱动器和路径,S 是文件名,但我不确定如何将其与作为路径的变量集成。

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

在这种情况下,您想要自己指定驱动器和路径,因此取决于 %OUTPUTFOLDER% 是否有尾部反斜杠

-o "%OUTPUTFOLDER%%%~nS"

或不使用:

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