![如何从另一个批处理文件启动批处理文件,同时传输其输出并保留当前工作目录?](https://linux22.com/image/1326767/%E5%A6%82%E4%BD%95%E4%BB%8E%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E5%90%AF%E5%8A%A8%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%EF%BC%8C%E5%90%8C%E6%97%B6%E4%BC%A0%E8%BE%93%E5%85%B6%E8%BE%93%E5%87%BA%E5%B9%B6%E4%BF%9D%E7%95%99%E5%BD%93%E5%89%8D%E5%B7%A5%E4%BD%9C%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我有一个作为计划任务运行的批处理文件。为了举例说明,我们将其命名为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""