【问题标题】:Why won't a batch file run when being called from within another batch file?为什么从另一个批处理文件中调用批处理文件时不会运行?
【发布时间】:2013-02-12 04:07:13
【问题描述】:

我有一个批处理文件,它首先创建另一个包含 ClearCase cleartool 命令的批处理文件,然后运行它:

ECHO cleartool lsactivity -long "%ACTIVITY%"^>"%OUTPUTFILE%">FILETORUN.bat
CALL FILETORUN.bat

运行批处理时,FILETORUN.bat 会以正确的格式生成,但它的 CALL 会被完全忽略。

如果我在CALL 之后将ECHO 输出到日志文件,我可以看到脚本只是跳过了它。

会是什么?

我已尝试删除 CALL,但没有任何区别。

编辑:解决方案

感谢大家的意见。我发现了问题。在脚本中写入批处理和批处理调用之前,有一个命令可以将信息从文件中读取到变量中:

SET /p FILETODELETE=<rmname_%CLEARCASE_USER%.tmp

它只读取第一行。由于某种原因,这与临时批处理文件产生了冲突,我不知道为什么。我使用不同的解决方案从文件中读取第一行,并且不再发生冲突:

(set FILETODELETE=)
for /f "delims=" %%q in (rmname_%CLEARCASE_USER%.tmp) do if not defined FILETODELETE set FILETODELETE=%%q

如果有人能解释一下,那就太好了!

【问题讨论】:

  • 你确定 FILETORUN.bat 没有被调用吗?还是它根本没有做你认为它应该做的事情?尝试注释掉 echo 行,手动编写 FILETORUN.bat(只是让它回显一些东西),并说服自己它真的根本没有运行。
  • 也许你需要包含路径:CALL "%OUTPUTFILE%\FILETORUN.bat"?
  • 你说它没有运行 - 仅仅是cleartool lsactivity 只返回一个错误(如果你不在你的视图中,它会返回),它不会被重定向到输出文件?您可以尝试将 stderr 重定向到一个文件(将 2&gt;&amp;1 添加到您生成的批处理文件中,这也会重定向错误 - 您需要转义 &gt;)并查看是否给您任何提示。
  • @NateHekman 嗨,内特。我尝试使用完整路径运行 bat,但没有任何区别。我还尝试添加一个新行:ECHO ECHO TEST^&gt;TEST.TXT&gt;TEST.BAT,然后是CALL TEST.BAT,这样就可以了。奇怪的是,上面的cleartool 批处理适用于 ClearCase 签入操作,但不适用于 ClearCase 删除操作(脚本是触发器)。唯一的区别是后一种情况在调用 cleartool 的脚本之前运行了另一个脚本。有没有办法适当地退出第一批?我目前使用EXIT /B 作为最后一行。
  • 您应该将其标记为已解决

标签: batch-file cmd call


【解决方案1】:

SET /P 等待用户输入,因此它实际上会使用您之后尝试执行的内容来完成命令并消耗输入缓冲区,这可能会在每台机器上产生不同的结果。 详情请见set command reference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多