首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未检测到Azure批处理服务错误代码上的cmd批处理文件中的管道输出

未检测到Azure批处理服务错误代码上的cmd批处理文件中的管道输出
EN

Stack Overflow用户
提问于 2017-05-29 15:32:27
回答 1查看 355关注 0票数 0
代码语言:javascript
复制
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文件名

EN

回答 1

Stack Overflow用户

发布于 2017-05-29 17:19:35

我不太理解为什么要运行cmd /cstart /wait来启动一个程序。不需要从start调用cmd.exe,也不需要调用cmd来启动批处理文件。

如果是批处理文件,可以直接调用批处理文件。它将在内部自动等待命令完成。

代码语言:javascript
复制
%AZ_BATCH_NODE_SHARED_DIR%\RunSqlCmd.cmd

无需再次调用start或cmd即可正常工作。

主要问题是,您正在将带有引号中的参数的命令发送到外部程序,因此您再次调用cmd,它会将命令发送到此cmd窗口,并在发送到外部程序时删除引号。只需按原样调用脚本即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44236905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档