2017-02-20 41 views
0

我想要將假脫機文件逐個從假脫機文件夾發送到打印機,並在處理完每個文件後將其移至另一個文件夾或將其刪除。 但是當我試圖在批處理文件下運行時,它直接移動假脫機文件而不發送到打印機,這是由於批處理。想要在windows批處理文件中逐一執行兩條命令

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。

在此先感謝。

回答

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替他人) 。

+0

爲什麼使用'START'?只是命令'E:\ spool \ xyz \ tp.exe等'會導致批處理文件等待。 –

+0

@ J.Baoby我試過你的解決方案,但假脫機文件沒有發送到打印機,它直接移動到另一個位置。並abot tp.exe程序它只是發送假脫機文件到打印機打印沒有任何處理it.I嘗試與PowerShell它與PoweShell罰款工作正常。但一些舊的Windows PC沒有PowerShell所以需要它在批處理文件。 –

+0

@ dev.Sumit它爲我工作與另一個可執行文件。你確定'tp.exe'總是在假脫機文件實際發送後退出嗎?它是否會啓動另一個連接到打印機併發送文件而不是自己發送的進程? –

相關問題