Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 调用.cmd文件会导致从父.cmd文件退出_Windows_Batch File - Fatal编程技术网

Windows 调用.cmd文件会导致从父.cmd文件退出

Windows 调用.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

我有一个.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中其余命令所需的许多环境变量和别名。因此,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”
更复杂

正如您在评论中所说,该命令从命令行工作