[前の記事]« Dosの画面が閉じない
[次の記事]結果の出力から件数部分を抽出して環境変数にセットしたい »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「FIND,FINDSTR,SORT…テキストファイル内文字列の操作」索引へ
▲カテゴリー「バッチファイルの文法と環境変数」索引へ

findstrがバッチだと動かない

381.
findstrがバッチだと動かないのはなぜでしょう?
2004年04月03日(土) 10時51分
みー
こんにちは。またご教示を仰ぎたいのですが、、

(問題点)
コマンドプロンプトを立ち上げて直接コマンドを打つとちゃんと結果が出るのに、まったく同じようにバッチの中に書いて実行するとその命令文がひたすらDOS窓の中を流れ続けて結果を得られない。

(実行文)
findstr /g:c:\test.txt c:\db.txt>c:\result.txt

(やりたいこと)
ファイルサーバーにある個人用フォルダ(フォルダ名は例えば12345とか0d0001など社員番号とまったく同じか社員番号の頭に0がついている)のフォルダ名が記述されたテキストファイル(c:\db.txt)と特定の社員一人分の社員番号(d0001)が記述されたテキストファイル(c:\test.txt)を比較し、社員番号に部分(あるいは”全部”)一致する個人用フォルダ名をテキストファイル(c:\result.txt)にはきださせたい。

繰り返しになってしまいますが、上の実行文をコマンドプロンプト上で直接打つとちゃんと目的の社員番号に一致するフォルダ名が得られるのですが、バッチに書いて実行するとひたすら命令文が画面を流れてしまうのです。これはなぜでしょうか?また、どのように対応すればよろしいでしょうか?

バッチだと実行者がシステムユーザーで動いてしまうからかな?と思い、試しに

runas /user:domainame\userid "findstr /g:c:\test.txt c:\db.txt>c:\result.txt"

というバッチを書いてみたのですが空っぽのテキストファイルがはきだされるだけで、やはりうまく動きません。

原因、対応方法ご存知の方、ご教示くださいませ。

なお、コマンドプロンプトにこだわっているわけではなく、やりたいことができれば他の方法でもいいのですが(sedやgrepならできるはずと思い調べながらやってみたのですが、挫折しました)なにぶん浅学なため正しい命令文がかけず、思うように動かせません。
"IZGREP"というフリーウェアの使い方をご存知の方、上記やりたいことを実現できる命令文を教えていただけないでしょうか?

長文になり申し訳ありません。よろしくお願いいたします。
382.
環境を書き忘れました
2004年04月03日(土) 11時01分
みー
環境を書き忘れました。
使用OSはWinXPと2000です。

失礼しました。
383.
Re:findstrがバッチだと動かないのはなぜでしょう?
2004年04月03日(土) 18時13分
oo
>(実行文)
>findstr /g:c:\test.txt c:\db.txt>c:\result.txt

これって、ファイル名とかルートディレクトリを使っている点とかから見て実際のスクリプトとは違うと思うのですが、各ファイルをこの名前でこの場所に置いて、この1行だけのバッチスクリプトでも現象が再現したということでしょうか?
384.
Re2:findstrがバッチだと動かないのはなぜでしょう?
2004年04月05日(月) 09時34分
みー
こんにちは。コメントありがとうございます。

>これって、ファイル名とかルートディレクトリを使っている点とかから見て実際のスクリプトとは違うと思うのですが、各ファイルをこの名前でこの場所に置いて、この1行だけのバッチスクリプトでも現象が再現したということでしょうか?



はい、テスト用にファイルを作り、ルートディレクトリにおいてあります。実行文として記述したとおりにバッチ内に書いて実行すると現象が発生します。よろしくお願いします。
385.
Re3:findstrがバッチだと動かないのはなぜでしょう?
2004年04月05日(月) 12時43分
じゃく
>はい、テスト用にファイルを作り、ルートディレクトリにおいてあります。実行文として記述したとおりにバッチ内に書いて実行すると現象が発生します。よろしくお願いします。

バッチの名前を findstr.bat としていませんか?
386.
う、動きました。
2004年04月05日(月) 15時18分
みー
こんにちは

>バッチの名前を findstr.bat としていませんか?

し、、してます。。名前が問題だったのですね?abc.batとしたら動きました。。助かりました。ありがとうございました。またよろしくお願いします。^^
387.
Re5:う、動きました。
2004年04月05日(月) 15時36分
じゃく
こんにちは。

>>バッチの名前を findstr.bat としていませんか?

>し、、してます。。名前が問題だったのですね?

バッチは、内部コマンド(DIRとかecho とか)に該当するコマンドがないときは、まず実行されたカレントディレクトリを探します。
今回の場合、実行したディレクトリに findstr というコマンド
(=今回の場合自分自身)があったため、自分自身を延々呼びだしたわけです。
カレントディレクトリに findstr というコマンドがなければ、
環境変数 PATH を探して、c:\windows\system32\ に 
findstr.exe を見つけて実行する動作になります。(ご参考まで)

他の掲示板でも、net use コマンドを書いたバッチをnet.bat と
してしまって延々繰り返す事例を読んだことがあります。
388.
なるほど!
2004年04月05日(月) 15時47分
みー
こんにちは。


>バッチは、内部コマンド(DIRとかecho とか)に該当するコマンドがないときは、まず実行されたカレントディレクトリを探します。
>今回の場合、実行したディレクトリに findstr というコマンド
>(=今回の場合自分自身)があったため、自分自身を延々呼びだしたわけです。
>カレントディレクトリに findstr というコマンドがなければ、
>環境変数 PATH を探して、c:\windows\system32\ に 
>findstr.exe を見つけて実行する動作になります。


なるほど!そういうわけだったんですか。納得しました。ご親切なご回答ありがとうございました。今後は、ファイル名にはコマンドをつけないようにします。
 
 


カテゴリー「FIND,FINDSTR,SORT…テキストファイル内文字列の操作」索引へ
カテゴリー「バッチファイルの文法と環境変数」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2004年04月03日 17:21に投稿されたエントリーのページです。

ひとつ前の投稿は「Dosの画面が閉じない」です。

次の投稿は「結果の出力から件数部分を抽出して環境変数にセットしたい」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート