2017-02-20 13 views
0

スプールファイルをスプールフォルダからプリンタに1つずつ送信したいのですが、各ファイルを処理した後、別のフォルダに移動するか削除します。 しかし、バッチファイルの下で実行しようとすると、バッチ処理のためにプリンタに送信せずにスプールファイルを直接移動します。Windowsのバッチファイルで1つずつコマンドを2つ実行したい

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)を知らないので、その場合には私はあなたを助けることができません。

EDIT:私はコード内で発生しただけでほとんど改善:あなたは%%~ffがあなたのためにそれを行うだろう、ループ変数に対応するファイルを取得するには、全体のパスを指定する必要はありません(他の人のためのthis linkを参照してください) 。

+0

なぜ「START」を使用するのですか? 'E:\ spool \ xyz \ tp.exe etc ... 'というコマンドだけでバッチファイルが待ちます。 –

+0

@ J.Baoby私はあなたのソリューションを試しましたが、スプールファイルはプリンタに送られず、別の場所に直接移動しました。そしてabot tp.exeプログラムはそれを処理するために何も印刷しないためにプリンタにスプールファイルを送るだけです。私はPowehellを使ってうまく動作しましたが、いくつかの古いウィンドウPCはpowershellを持っていませんのでバッチファイルで行う必要があります。 –

+0

@ dev.Sumitは別の実行可能ファイルで私のために働いていました。スプールファイルが実際に送信されると 'tp.exe'は必ず終了しますか?プリンタに接続し、ファイルを送信する代わりに送信する別のプロセスを開始することができますか? –

関連する問題