如何从另一个批处理文件启动批处理文件,同时传输其输出并保留当前工作目录?

如何从另一个批处理文件启动批处理文件,同时传输其输出并保留当前工作目录?

我有一个作为计划任务运行的批处理文件。为了举例说明,我们将其命名为alltasks.bat

它看起来如下所示:

@ECHO OFF
clearwebtemp.bat > clearwebtemp_out.txt
clearblahtemp.bat > clearblahtemp_out.txt
clearblihtemp.bat > clearblihtemp_out.txt

当所有被调用的脚本都没有改变目录时,这种方法可以正常工作,但如果它们改变了目录,那么主脚本就无法完成剩余的批处理调用或将输出传送到文件。

我尝试使用该start命令,但可以预见的是,它会通过管道传输命令的输出start,而不是批处理文件本身的输出。

我还尝试使用%CD%脚本顶部的变量保留当前工作目录,然后在每次调用后切换回该目录,但文件的输出是在脚本切换到的目录中完成的,这似乎没有意义。

有没有一种明显(或不那么明显)的方法来实现我试图完成的任务?

答案1

这应该可以满足您的要求:

cmd /c clearwebtemp.bat > clearwebtemp_out.txt
cmd /c clearblahtemp.bat > clearblahtemp_out.txt
cmd /c clearblihtemp.bat > clearblihtemp_out.txt

答案2

另一个解决方案:

@ECHO OFF
pushd .
call clearwebtemp.bat > clearwebtemp_out.txt
popd
pushd .
call clearblahtemp.bat > clearblahtemp_out.txt
popd
pushd .
call clearblihtemp.bat > clearblihtemp_out.txt

或者

@ECHO OFF
call clearwebtemp.bat > clearwebtemp_out.txt
%~d0
cd %~p0
call clearblahtemp.bat > clearblahtemp_out.txt
%~d0
cd %~p0
call clearblihtemp.bat > clearblihtemp_out.txt

%~d0如果您的蝙蝠:)留在同一个驱动器上, 您可以忽略它。

答案3

您可以使用循环来执行此操作:cmd /c "for command"

@cmd /q /s /c "for %%i in (web,blah,blih)do "clear%%~itemp.bat" > "clear%%~itemp_out.txt""
clear+ web  +temp.bat > clear+ web  + temp_out.txt
clear+ blah +temp.bat > clear+ blah + temp_out.txt
clear+ blih +temp.bat > clear+ blih + temp_out.txt
@cmd /q /s /c "for ( web, blah, blih ) +  "clear + %%~i + temp.cmd"  > "clear + %%~i + temp_out.txt""
  • 要调用并等待每个运行完后再调用下一个,请使用call file.bat
@cmd /q /s /c "for %%i in (web,blah,blih)do call "clear%%~itemp.bat" > "clear%%~itemp_out.txt""

相关内容