我有一个作为计划任务运行的批处理文件。为了举例说明,我们将其命名为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""