【发布时间】: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>&1添加到您生成的批处理文件中,这也会重定向错误 - 您需要转义>)并查看是否给您任何提示。 -
@NateHekman 嗨,内特。我尝试使用完整路径运行 bat,但没有任何区别。我还尝试添加一个新行:
ECHO ECHO TEST^>TEST.TXT>TEST.BAT,然后是CALL TEST.BAT,这样就可以了。奇怪的是,上面的cleartool批处理适用于 ClearCase 签入操作,但不适用于 ClearCase 删除操作(脚本是触发器)。唯一的区别是后一种情况在调用 cleartool 的脚本之前运行了另一个脚本。有没有办法适当地退出第一批?我目前使用EXIT /B作为最后一行。 -
您应该将其标记为已解决
标签: batch-file cmd call