sqlcmd -i.\table.sql -S . -E -s "," -I -h -1 -W| "c:\Program Files\7-Zip\7z.exe" a -tbzip2 -si "out.csv.bz2"(1) cmd /c %AZ_BATCH_NODE_SHARED_DIR%\RunSqlCmd.cmd
但似乎发生的情况是,命令行几乎立即返回,RunSqlCmd.cmd中的命令没有完全执行,并创建了空的压缩存档。Azure批处理任务退出,成功代码为0。
如果我将任务的命令行更改为
(2) cmd /c start /wait %AZ_BATCH_NODE_SHARED_DIR%\RunSqlCmd.cmd
批处理文件中的命令成功运行,但Azure批处理的stdout和stderr丢失,因为批处理文件在单独的cmd窗口中运行,并且任务挂起而没有获得任何错误代码。
将tasks的命令行更改为
(3) cmd /c start /B /wait %AZ_BATCH_NODE_SHARED_DIR%\RunSqlCmd.cmd
类似于(1)
什么是正确的方法,以便Azure Batch在任务完成和RunSqlCmd.cmd命令完全完成时正确检测?
附注: 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文件名
发布于 2017-05-29 17:19:35
我不太理解为什么要运行cmd /c和start /wait来启动一个程序。不需要从start调用cmd.exe,也不需要调用cmd来启动批处理文件。
如果是批处理文件,可以直接调用批处理文件。它将在内部自动等待命令完成。
%AZ_BATCH_NODE_SHARED_DIR%\RunSqlCmd.cmd无需再次调用start或cmd即可正常工作。
主要问题是,您正在将带有引号中的参数的命令发送到外部程序,因此您再次调用cmd,它会将命令发送到此cmd窗口,并在发送到外部程序时删除引号。只需按原样调用脚本即可。
https://stackoverflow.com/questions/44236905
复制相似问题