みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが

バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが開けない

(1)と(2)のバッチファイルを作りました。それぞれ単体で実行すると、エラーは出ません。
(1)と(2)を一緒にした(3)というバッチファイルで実行すると、FINDSTRのところで、
「ファイルを開くことができません」というエラーが出て、途中でとまってしまいます。

エラーを出さずに実行する方法は何かないでしょうか?
(A.batは、CドライブにあるWord.exeを実行するだけのバッチファイルです。)

どうぞよろしくお願いします。


【(3)の中身】

call A.bat >kekka.txt   ←この1行だけが(1)のバッチファイルの中身です
GOTO kensaku
GOTO :EOF

::文字列検索
:kensaku
SET keyword=作成しました。   ←この行から下が(2)のバッチファイルの中身です
FINDSTR %keyword% kensaku.txt > NUL
GOTO kekka%ERRORLEVEL%
GOTO :EOF

:kekka0
REM 文字列あり
ECHO %keyword%がありました
PAUSE > nul
GOTO :EOF

:kekka1
REM 文字列なし
ECHO %keyword%はありませんでした。
PAUSE > nul
GOTO :EOF

投稿日時 - 2010-10-07 12:06:21

QNo.6233354

すぐに回答ほしいです

質問者が選んだベストアンサー

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」を追加

投稿日時 - 2010-10-08 11:26:35

お礼

教えていただいた2つをどちらも試しましたが、どちらでもkekka.txtを開くことができました!!

質問の書き間違えに始まって、要領の得ない質問に何回も何回も丁寧に答えていただき、大変感謝しています。

今、うまく実行できて、天にも昇るうれしさです。すっごいニヤニヤしてます。

本当に、本当にありがとうございましたっ。

投稿日時 - 2010-10-08 13:06:34

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

>1番目の質問は答えることができなくて、すみません。ほかに何か理由が思い当たることが
>ありましたら、何でもいいので、ぜひ教えてください。よろしくお願いします。

findstrの前に変な処理(cdとか、その他もろもろ)をしてるぐらいしか思いつかないですね。

質問のバッチに誤植があったということはどうやら(3)のシェル「そのもの」を貼り付けている訳ではなさそうなので、「そのもの」のシェルを見てみないと何とも言えないです。


解決の糸口にはならないかもしれないですが、あと気になるのは
・DOSプロンプト上でバッチファイルを実行したのか?それともバッチファイルをそのまま(ダブルクリックor選択してEnterなどで)実行したのか?
・(3)のバッチとA.batとkekka.txtは同じフォルダにあるのか?
ぐらいです。

投稿日時 - 2010-10-07 20:00:41

補足

またまた回答、ありがとうございます。

・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

投稿日時 - 2010-10-08 09:39:22

ANo.2

とりあえずバッチ動かしてみました。
「ファイルなし」にはなりませんでしたよ。

■気になる点
・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>

投稿日時 - 2010-10-07 13:23:47

補足

早速の回答ありがとうございます。

質問にお答えします。


・A.batで実際にやっている処理は何か?(Word.exeってもしかしてOfficeのWINWORD.EXEのこと?)

→ OfficeのWINWORD.EXEではありません。Word.exeという名前なのですが、作ったのは自分ではなく、業者なので、実際には中身がどうなってるかはわかりません。


・リダイレクトでkekka.txtに落とし込んでるけど、これって「作成しました。」が書き込める?

→ 書き込めています。
  Word.exeを実行した結果をkekka.txtに出力していますが、実行した後、kekka.txtを
 開いて見てみると、「作成しました。」と書かれているときと、「作成してません。」と書かれて
 いるときの2通りの結果があります。

1番目の質問は答えることができなくて、すみません。ほかに何か理由が思い当たることが
ありましたら、何でもいいので、ぜひ教えてください。よろしくお願いします。

投稿日時 - 2010-10-07 16:53:50

ANo.1

貼り付けてある(3)のバッチをそのまま信じると、単に kensaku.txt が無いだけでは?

投稿日時 - 2010-10-07 12:27:07

補足

すみません。書き間違えました。

「kekka.txt」と書くべきところを「「kensaku.txt」と書いてしまいました。

実際のバッチファイルは、ちゃんと「kekka.txt」となっていましたので、引き続き、回答をよろしくお願いします。

投稿日時 - 2010-10-07 12:59:53

あなたにオススメの質問