Windows 调用.cmd文件会导致从父.cmd文件退出
我有一个.cmd文件,它调用另一个.cmd文件,如下所示 parent.cmdWindows 调用.cmd文件会导致从父.cmd文件退出,windows,batch-file,Windows,Batch File,我有一个.cmd文件,它调用另一个.cmd文件,如下所示 parent.cmd call "C:\Program Files\Prog1\bin\dostuff.cmd" -abc="def" def.cmd运行后,dos窗口跳到下一行,显示提示符> 因此,根据命令提示,parent.cmd文件已完成执行。但是,调用dostuff.cmd后,parent.cmd文件不完整,需要运行许多其他命令 dostuff.cmd设置parent.cmd中其余命令所需的许多环境变量和别名。因此,dostuf
call "C:\Program Files\Prog1\bin\dostuff.cmd" -abc="def"
def.cmd运行后,dos窗口跳到下一行,显示提示符>
因此,根据命令提示,parent.cmd文件已完成执行。但是,调用dostuff.cmd后,parent.cmd文件不完整,需要运行许多其他命令
dostuff.cmd设置parent.cmd中其余命令所需的许多环境变量和别名。因此,dostuff.cmd必须在与parent.cmd相同的命令提示符下运行
dostuff.cmd是由其他人编写的,并且做了各种我一无所知的事情。如果我以上述方式调用我自己设计的其他一些.cmd文件,它将正确执行,然后parent.cmd文件将继续执行,没有任何问题
因此,dostuff.cmd中的某些内容正在关闭对parent.cmd的处理。你知道这可能是什么吗?我怎样才能阻止它/绕开它
以下是parent.cmd程序:
@echo off
:Begin
echo.hello
call "C:\Program Files\Prog1\bin\dostuff.cmd" -abc="def"
echo.goodbye
:End
输出是
C:\Users\cowman\desktop>.\parent.cmd
hello
dostuff.cmd text...blah blah
C:\Users\cowman\desktop>
正如您所看到的,echo.再见代码没有被调用。如果没有
dostuff.cmd
的列表,我们猜测
我的猜测是dostuff.cmd
本身调用cmd
。如果要响应第二个提示exit
,则应返回调用者(除非dostuff.cmd
再次调用cmd
)
如果
exit
响应终止cmd
会话并关闭窗口,那么这是一个真正的谜团。没有dostuff.cmd
列表,我们在猜测
我的猜测是dostuff.cmd
本身调用cmd
。如果要对第二个提示做出exit
响应,则应返回调用方(除非dostuff.cmd
再次调用cmd
)
如果
exit
响应终止cmd
会话并关闭窗口,那么这是一个真正的谜团。没有dostuff.cmd
列表,我们在猜测
我的猜测是dostuff.cmd
本身调用cmd
。如果要对第二个提示做出exit
响应,则应返回调用方(除非dostuff.cmd
再次调用cmd
)
如果
exit
响应终止cmd
会话并关闭窗口,那么这是一个真正的谜团。没有dostuff.cmd
列表,我们在猜测
我的猜测是dostuff.cmd
本身调用cmd
。如果要对第二个提示做出exit
响应,则应返回调用方(除非dostuff.cmd
再次调用cmd
)
如果
exit
响应终止cmd
会话并关闭窗口,那么这是一个真正的谜。听起来dostuff.cmd出于某种原因正在退出,这将导致整个cmd.exe退出
它在任何地方都有“exit”命令吗?可以尝试更改为“exit/B”仅退出脚本而不是cmd.exe听起来dostuff.cmd出于某种原因正在退出,这将导致整个cmd.exe退出
它在任何地方都有“exit”命令吗?可以尝试更改为“exit/B”仅退出脚本而不是cmd.exe听起来dostuff.cmd出于某种原因正在退出,这将导致整个cmd.exe退出
它在任何地方都有“exit”命令吗?可以尝试更改为“exit/B”仅退出脚本而不是cmd.exe听起来dostuff.cmd出于某种原因正在退出,这将导致整个cmd.exe退出
它在任何地方都有“exit”命令吗?可以尝试更改为“exit/B”以仅退出脚本而不是cmd.exe这听起来是由于将流2重定向到nul时批处理文件中出现语法错误而退出了
doStuff.cmd
语法错误会立即停止所有批处理实例/调用堆栈,但命令窗口保持打开状态
我假设批处理文件的名称不是doStuff.cmd
,而且参数比-abc=“def”
更复杂
正如您在评论中所说,该命令是从命令行执行的,但不是从父批处理执行的,我认为参数包含百分号或插入符号
如果它们包含百分号,请尝试将其四倍。doStuff.cmd“printf(“%d”,1)”
将其转换为
调用doStuff.cmd“printf(“%%d”,1)”
当涉及到插入符号时,请尝试以下操作
set "myCaret=^"
call doStuff.cmd "a caret%%myCaret%%"
这听起来像是将流2重定向到nul时,批处理文件中的语法错误退出了
doStuff.cmd
语法错误会立即停止所有批处理实例/调用堆栈,但命令窗口保持打开状态
我假设批处理文件的名称不是doStuff.cmd
,而且参数比-abc=“def”
更复杂
正如您在评论中所说,该命令是从命令行执行的,但不是从父批处理执行的,我认为参数包含百分号或插入符号
如果它们包含百分号,请尝试将其四倍。doStuff.cmd“printf(“%d”,1)”
将其转换为
调用doStuff.cmd“printf(“%%d”,1)”
当涉及到插入符号时,请尝试以下操作
set "myCaret=^"
call doStuff.cmd "a caret%%myCaret%%"
这听起来像是将流2重定向到nul时,批处理文件中的语法错误退出了
doStuff.cmd
语法错误会立即停止所有批处理实例/调用堆栈,但命令窗口保持打开状态
我假设批处理文件的名称不是doStuff.cmd
,而且参数比-abc=“def”
更复杂
正如您在评论中所说,该命令从命令行工作