想要在Windows批处理文件中逐个执行两个命令

时间:2017-02-20 08:52:52

标签: windows batch-file batch-processing

我想将假脱机文件从假脱机文件夹中逐个发送到打印机,处理好每个文件后,它将被移动到另一个文件夹或删除它。 但是当我试图在批处理文件下运行时,它会直接移动假脱机文件,而不会发送到打印机,这是由于批处理。

 for %%f in (C:\WINDOWS\system32\spool\PRINTERS\*.SPL) do (
            echo %%~nf
            start "" E:\spool\xyz\tp.exe "C:\WINDOWS\system32\spool\PRINTERS\%%~nf.SPL" "HP Printer"
            move "C:\WINDOWS\system32\spool\PRINTERS\%%~nf.SPL" d:\%%~nf.txt
        )

如果不使用Windows PowerShell,则需要任何替代选项。

提前致谢。

1 个答案:

答案 0 :(得分:2)

这不是因为批处理。默认情况下,批处理在命令终止之前等待,然后再继续。所以遗漏start应该这样做 问题实际上是start命令。默认情况下,start将作为新进程执行程序,并且不会等待它完成。请改用start /WAIT/WAIT选项会要求它等待。但正如我先前所说,你甚至不需要start。 假设您的程序在完成任务后退出,您应该:

for %%f in ("C:\WINDOWS\system32\spool\PRINTERS\*.SPL") do ( 
    echo %%~nf
    E:\spool\xyz\tp.exe "%%~ff" "HP Printer"
    move "%%~ff" d:\%%~nf.txt 
)

一般来说应该这样做。但是,如果程序E:\spool\xyz\tp.exe本身启动某种后台进程并退出而不等待它终止,那么即使start /WAIT也无济于事。由于我不知道你正在使用的程序(E:\spool\xyz\tp.exe),在这种情况下我无法帮助你。

编辑:我在代码中做了一点改进:你不需要指定整个路径来获取与循环变量对应的文件,%%~ff会这样做为你(见this link为其他人)。