【发布时间】:2018-06-16 04:35:07
【问题描述】:
如果一个脚本在调用EXIT 1 时应该在子程序中退出而不关闭终端。我在那里使用this if 再次调用脚本。
这一直很好,直到我现在发现带引号的竖线作为参数"!" 存在一些问题。我收到一条错误消息,指出命令拼写错误。
下面是失败的脚本部分:
@ECHO OFF
SETLOCAL DISABLEDELAYEDEXPANSION
IF "%selfWrapped%"=="" (
REM this is necessary so that we can use "exit" to terminate the batch file,
REM and all subroutines, but not the original cmd.exe
SET selfWrapped=true
%ComSpec% /s /c ""%~0" %*"
GOTO :EOF
)
echo %*
ENDLOCAL
EXIT /B 0
呼叫:
test.cmd "hello world" "|"
预期输出:
"hello world" "|"
我检查了IF 中%* 的值,但使用竖线以及任何其他带引号的字符串似乎完全合法。
所以...
- 为什么脚本会失败?
- 我该如何解决?
【问题讨论】:
-
如果您直接运行 bat 或使用调用,则可以正常工作:
"%~0" %*或CALL "%~0" %* -
你试过这个吗:
"%ComSpec%" /S /C "%~0" %*? -
@Squashman,如备注中所述,新的
cmd实例需要能够使用exit终止批处理脚本及其所有子例程,因此当前实例不会退出... -
这个呢:
"%ComSpec%" /S /C ^^^""%~0" %*^^^",甚至"%ComSpec%" /S /C ^^^""%~0" %?
标签: batch-file cmd scripting windows-scripting