假设存在执行另一个批处理文件(被调用者)的批处理文件(调用者),则call需要使用该命令以便在被调用者完成执行后返回调用者.这是一个例子:
caller.bat:
echo Calling another script...
call callee.bat
echo Returned from callee...
Run Code Online (Sandbox Code Playgroud)
callee.bat(在同一地点):
echo Being called from caller...
Run Code Online (Sandbox Code Playgroud)
输出将是这个(省略命令echos),表明执行按预期返回:
Run Code Online (Sandbox Code Playgroud)Calling another script... Being called from caller... Returned from callee...
如果call命令在调用者中被解除,则输出将为:
Run Code Online (Sandbox Code Playgroud)Calling another script... Being called from caller...
但是一旦被调用者涉及管道(|),则call命令是否被使用没有区别.例如:
caller.bat(被调用者保持不变):
echo Calling another script...
break | callee.bat
echo Returned from callee...
Run Code Online (Sandbox Code Playgroud)
输出将是这个,虽然没有call命令.
Run Code Online (Sandbox Code Playgroud)Calling another script... Being called from caller... Returned from callee...
这种行为的原因是什么,导致执行返回给调用者的原因是什么?
当CMD.exe终止时,为什么下面的批处理文件不保留变量
@echo off
cmd /c "set var=hi"
if defined var (echo var is defined ("var=%var%")) else (echo var isn't defined)
pause
exit
Run Code Online (Sandbox Code Playgroud)
有没有办法使用CMD/c,同时保留变量?为什么CMD/c不保留变量?