- ベストアンサー
バッチファイルでFINDSTRを使って文字列検索する方法とエラー対処法
- バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが開けないエラーが発生します。
- バッチファイルの中に複数のバッチファイルを組み合わせて実行すると、FINDSTRの部分でファイルを開くことができないエラーが発生します。
- エラーを回避してバッチファイルで文字列検索を実行する方法はありませんか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
A.batとWord.exeの仕様が良く分からないので何とも言えないですが、 そのどちらかでカレントフォルダが変わっていると今回のことが起きます。 (3)のバッチの call C:\1a\1b\1c\A.bat >kekka.txt を実行したタイミングだとカレントフォルダは「C:\バッチファイル」なので kekka.txtは「C:\バッチファイル」の下に出力されますが、A.batなどで フォルダ移動しているとcall以降の処理は移動先のフォルダをカレントフォルダ として実行されます。(当然kekka.txtが無いので開けない) 試しに、(3)のバッチを以下のどちらでも良いので変更して、動くか確認してみてください。 ・FINDSTRの行を「FINDSTR %keyword% %~dp0kekka.txt > NUL」に変更 ・callの次の行に「cd %~dp0」を追加
その他の回答 (3)
- crossgate
- ベストアンサー率65% (78/119)
>1番目の質問は答えることができなくて、すみません。ほかに何か理由が思い当たることが >ありましたら、何でもいいので、ぜひ教えてください。よろしくお願いします。 findstrの前に変な処理(cdとか、その他もろもろ)をしてるぐらいしか思いつかないですね。 質問のバッチに誤植があったということはどうやら(3)のシェル「そのもの」を貼り付けている訳ではなさそうなので、「そのもの」のシェルを見てみないと何とも言えないです。 解決の糸口にはならないかもしれないですが、あと気になるのは ・DOSプロンプト上でバッチファイルを実行したのか?それともバッチファイルをそのまま(ダブルクリックor選択してEnterなどで)実行したのか? ・(3)のバッチとA.batとkekka.txtは同じフォルダにあるのか? ぐらいです。
補足
またまた回答、ありがとうございます。 ・DOSプロンプト上でバッチファイルを実行したのか?それともバッチファイルをそのまま(ダブルクリックor選択してEnterなどで)実行したのか? → バッチファイルをダブルクリックして実行してます。 ・(3)のバッチとA.batとkekka.txtは同じフォルダにあるのか? → 同じフォルダにはありません。 もう一回、バッチファイルの内容を載せますので、よろしくお願いします。 「C:\バッチファイル\」の中にあるもの ・(3)のバッチファイル ・kekka.txt 「C:\1a\1b\1c\」の中にあるもの ・A.bat ・Word.exe ※A.batは、C:\1a\1b\1c\Word.exeを実行するだけのバッチファイルです 【(3)のバッチファイルの中身】 call C:\1a\1b\1c\A.bat >kekka.txt GOTO kensaku GOTO :EOF ::文字列検索 :kensaku SET keyword=作成しました。 FINDSTR %keyword% kekka.txt > NUL GOTO kekka%ERRORLEVEL% GOTO :EOF :kekka0 REM 文字列あり ECHO %keyword%がありました PAUSE > nul GOTO :EOF :kekka1 REM 文字列なし ECHO %keyword%はありませんでした。 PAUSE > nul GOTO :EOF
- crossgate
- ベストアンサー率65% (78/119)
とりあえずバッチ動かしてみました。 「ファイルなし」にはなりませんでしたよ。 ■気になる点 ・A.batで実際にやっている処理は何か?(Word.exeってもしかしてOfficeのWINWORD.EXEのこと?) ・リダイレクトでkekka.txtに落とし込んでるけど、これって「作成しました。」が書き込める? (こちらで作ったバッチでは無理。当然ですが。。。) ということで、バッチ(A.batも含めて)をそのまま書いてもらわないとホントのことは分かりません。 ■バッチ notepad.exe >kekka.txt ← A.batで実際にやっている処理が分からないからメモ帳で代用 GOTO kensaku GOTO :EOF ::文字列検索 :kensaku SET keyword=作成しました。 FINDSTR %keyword% kekka.txt > NUL GOTO kekka%ERRORLEVEL% GOTO :EOF :kekka0 REM 文字列あり ECHO %keyword%がありました PAUSE > nul GOTO :EOF :kekka1 REM 文字列なし ECHO %keyword%はありませんでした。 PAUSE > nul GOTO :EOF ■実行結果 D:\tmp>.\test.bat D:\tmp>call notepad.exe 1>kekka.txt D:\tmp>GOTO kensaku D:\tmp>SET keyword=作成しました。 D:\tmp>FINDSTR 作成しました。 kekka.txt 1>NUL D:\tmp>GOTO kekka1 D:\tmp>REM 文字列なし D:\tmp>ECHO 作成しました。はありませんでした。 作成しました。はありませんでした。 D:\tmp>PAUSE 1>nul バッチ ジョブを終了しますか (Y/N)? y D:\tmp>
補足
早速の回答ありがとうございます。 質問にお答えします。 ・A.batで実際にやっている処理は何か?(Word.exeってもしかしてOfficeのWINWORD.EXEのこと?) → OfficeのWINWORD.EXEではありません。Word.exeという名前なのですが、作ったのは自分ではなく、業者なので、実際には中身がどうなってるかはわかりません。 ・リダイレクトでkekka.txtに落とし込んでるけど、これって「作成しました。」が書き込める? → 書き込めています。 Word.exeを実行した結果をkekka.txtに出力していますが、実行した後、kekka.txtを 開いて見てみると、「作成しました。」と書かれているときと、「作成してません。」と書かれて いるときの2通りの結果があります。 1番目の質問は答えることができなくて、すみません。ほかに何か理由が思い当たることが ありましたら、何でもいいので、ぜひ教えてください。よろしくお願いします。
- crossgate
- ベストアンサー率65% (78/119)
貼り付けてある(3)のバッチをそのまま信じると、単に kensaku.txt が無いだけでは?
補足
すみません。書き間違えました。 「kekka.txt」と書くべきところを「「kensaku.txt」と書いてしまいました。 実際のバッチファイルは、ちゃんと「kekka.txt」となっていましたので、引き続き、回答をよろしくお願いします。
お礼
教えていただいた2つをどちらも試しましたが、どちらでもkekka.txtを開くことができました!! 質問の書き間違えに始まって、要領の得ない質問に何回も何回も丁寧に答えていただき、大変感謝しています。 今、うまく実行できて、天にも昇るうれしさです。すっごいニヤニヤしてます。 本当に、本当にありがとうございましたっ。