- 締切済み
コマンドプロンプトのfor文での連続コマンドについて
コマンドプロンプトのfor文での連続コマンドについて winXPを使っています。 コマンドプロンプトでバッチファイルを作り、フォルダーの中にあるPDFファイルをアドビリーダーで印刷して削除したいのですが、アドビリーダーを手動で終了させないとファイルの削除ができません。どうすればいいでしょうか。 *****printpdf.batの内容**************** for %%A in (E:\pdf\*.*) do ( "C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe" /t %%A taskkill /F /IM AcroRd32.exe Del %%A ) *************************************** 3行目のtaskkillが問題らしいのですが。。。 また、本当はコマンドを&&でつなげたいのですが、 ( )でくくらないとDELされません。 &&でつなげるにはどうしたらいいか、 その点もおわかりでしたらご教授ください。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
>AcroRd32コマンドが終了してもアドビリーダーが開いたままなのです。 リーダーの画面が開いたままと言うことは、AcroRd32コマンドが終了していないと言うことですが?? 画面を閉じればAcroRd32コマンドが終了します。 もしかして、バッチの質問ではなくて、「アドビリーダーで印刷後に自動的に終了するには、/t オプションの他に何を付ければいいでしょう?」というのが質問なのでしょうか? それだと私にはわかりません。 バッチで解決するとすると、「リーダーを起動してから60秒後に強制終了する」でいいなら(非常に大きなファイルだと60秒後はまだ印刷中かもしれませんが), ( start "" "C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe" /t %%A ping -n 61 localhost >NUL taskkill /F /IM AcroRd32.exe Del %%A )
- notnot
- ベストアンサー率47% (4900/10358)
まず、( ) でくくるのと&&でつなげるのは意味が違います。 ( A B ) は、コマンドAが終了したらコマンドBを起動する。 A && B は、コマンドAが正常終了したらコマンドBを起動し、Aが異常終了(ERROELEVELが0以外)ならコマンドBを起動しない。 ( ) と同じ意味になるのは、A & B です。 ( "C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe" /t %%A taskkill /F /IM AcroRd32.exe Del %%A ) だと、taskkillコマンドが起動されるのは、AcroRd32コマンドが終了してからなので、KillすべきAcroRd32プロセスはないはずです。つまり、 ( "C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe" /t %%A Del %%A ) で良いはず。ただ、直後で消えないのであれば、 ( "C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe" /t %%A ping -n 2 localhost > NUL Del %%A ) と、すこし時間待ちを入れてみてはどうでしょうか?
お礼
ご回答ありがとうございます。 でもうまくいきません。 >だと、taskkillコマンドが起動されるのは、AcroRd32コマンドが終了してからなので、KillすべきAcroRd32プロセスはないはずです。 AcroRd32コマンドが終了してもアドビリーダーが開いたままなのです。 そこでtaskkillを入れてみたのですがやはり。。。
お礼
ご回答ありがとうございます。 >もしかして、バッチの質問ではなくて、「アドビリーダーで印刷後に自動的に終了するには、/t オプションの他に何を付ければいいでしょう?」というのが質問なのでしょうか? そう言いたかったのですがうまく伝わらなかったようですね。 ごめんなさい。 結局VBScriptで以下のように書いて動かしました。 *************printpdf.vbs************************************ Set objWshShell = WScript.CreateObject("WScript.Shell") Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFolder("E:\pdf\") Set fc = f.Files For Each f1 in fc fn = "E:\pdf\"&f1.name objWshShell.Run """C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe"" /n /t """&fn&"""" WScript.Sleep(10000) fs.deletefile f1 Next Set fs = Nothing Set f = Nothing Set fc = Nothing objWshshell.Run"closeadb.bat" Set objWshShell =nothing ************************************************************* ************closeadb.bat************************************* @echo off taskkill /F /IM AcroRd32.exe ************************************************************* どうもありがとうございました。 問題は別の形で解決しましたのでこれにて終了させていただきます。