我有一个.cmd批处理文件(让我们称之为RunSQlCmd.cmd),该管道从SQLCMD的输出至7拉链压缩机管道输出未检测
sqlcmd -i.\table.sql -S . -E -s "," -I -h -1 -W| "c:\Program Files\7-Zip\7z.exe" a -tbzip2 -si "out.csv.bz2"
我从Azure的批任务从C#的驱动程序使用下面的命令行运行它
(1)cmd /c %AZ_BATCH_NODE_SHARED_DIR%\RunSqlCmd.cmd
但是,似乎发生的是命令行几乎立即返回,并在RunSqlCmd.cmd命令不可完全执行并抢占y压缩存档被创建。 Azure的批处理任务的成功代码0
退出。如果我的任务的命令行更改为
(2)在批处理文件运行cmd /c start /wait %AZ_BATCH_NODE_SHARED_DIR%\RunSqlCmd.cmd
命令成功,但由于输出和错误丢失了Azure的批次批量文件在单独的cmd窗口中运行,并且任务挂起而不会收到任何错误代码。
改变任务的命令行
(3)cmd /c start /B /wait %AZ_BATCH_NODE_SHARED_DIR%\RunSqlCmd.cmd
类似于(1)
是什么让Azure的批量当任务完成正确检测做了正确的方式RunSqlCmd.cmd命令完成完成?
P.S. RunSqlCmd.cmd文件的真实内容是 @echo Run SqlCmd sqlcmd -i "%~dp0%1.sql" -d dbName -S serverName -U userName -P "password" -s "," -I -h -1 -W -b | "%ProgramFiles%\7-Zip\7z.exe" a -tbzip2 -si "%~dp0%1.csv.bz2" @echo Done SqlCmd
需要1个参数 - SQL文件的名称来提取数据
显然,从'start/wait'文件中“如果它是内部cmd命令或批处理文件,那么命令处理器将通过/ K开关运行到cmd.exe。这意味着窗口将在命令已经运行“。 所以它是默认的/ K开关添加'开始/等待',这是一个问题。如果我将其更改为'开始/等待cmd/c%AZ_BATCH_NODE_SHARED_DIR%\ RunSqlCmd.cmd'它一切正常,但stdout和stderr都丢失 – YuGagarin