我想将假脱机文件从假脱机文件夹中逐个发送到打印机,处理好每个文件后,它将被移动到另一个文件夹或删除它。 但是当我试图在批处理文件下运行时,它会直接移动假脱机文件,而不会发送到打印机,这是由于批处理。
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,则需要任何替代选项。
提前致谢。
答案 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为其他人)。