[前の記事]« 変数に代入したパスを参照すると「指定されたファイルが見つかりません」になる
[次の記事]unixの「touch」に相当するコマンドは? »

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

▲カテゴリー「UNIXコマンドとDOS/Windows」索引へ

unixのshellのWindowsバッチへの変換がうまくいかない

32.
unixのshellをバッチに変換
2004年01月07日(水) 21時20分
ユウ
どなたか教えてください。私は今、unixのシェルをバッチファイルに
置き換えているのですが、コマンドで出した結果を変数に入れ、if文で
使いたいのです。でもどうしても上手くいきません。
例 unix
 set VANNUM = `ls -l /a/b |grep abc |wc -l`
  バッチ
 for /f %%z in ('dir c:\a\b ^| find /c "abc"') do set vannum=%%z
echo %vannum%

とやっても変数vannumに0が入ってきてしまうのです。
(ちゃんと検索文字列の書いてあるファイルは存在しているのですが)
どなたか助けてください。ひぇ~~。
37.
Re:unixのshellをバッチに変換
2004年01月08日(木) 06時20分
ふぇむ
>for /f %%z in ('dir c:\a\b ^| find /c "abc"') do set vannum=%%z
>echo %vannum%

>とやっても変数vannumに0が入ってきてしまうのです。
>(ちゃんと検索文字列の書いてあるファイルは存在しているのですが)

0が入ってきてしまうということは、構文的には意図どおり動いているが find が 0 を返しているように思います。

dir c:\a\b | find /c "abc"

だけを実行して 0 が返っていません?

あるはずなのにひっかからないという状況なら、ひとつ疑わしいことは、対象のファイル名に含まれる abc は大文字になってたりしていません?
find は大文字小文字を区別するので、大文字の ABC はひっかかりません。
もしそうなら、find に /I オプションをつけると大文字小文字の区別をしなくなります。
39.
Re:unixのshellをバッチに変換
2004年01月08日(木) 06時45分
ふぇむ
>とやっても変数vannumに0が入ってきてしまうのです。
>(ちゃんと検索文字列の書いてあるファイルは存在しているのですが)

ちょっと確認。「検索文字列の書いてあるファイル」って、「ファイル名に検索文字列を含むファイル」ということですよね。
40.
Re2:unixのshellをバッチに変換
2004年01月08日(木) 09時40分
ユウ
ふぇむさん、ご回答ありがとうございます。

>ちょっと確認。「検索文字列の書いてあるファイル」って、「ファイル名に検索文字列を含むファイル」ということですよね。

いえ、ファイルの中身に"abc"の文字列があるということです。
findは中身を検索するコマンドですよね?forの中で使用するとファイル名の検索になってしまうのですか?find/?で調べた感じでは中身を検索するものだと理解したのですが・・・。
無知すぎてごめんなさい。どうかご回答をお願いいたします。
46.
Re3:unixのshellをバッチに変換
2004年01月08日(木) 14時18分
ふぇむ
>>ちょっと確認。「検索文字列の書いてあるファイル」って、「ファイル名に検索文字列を含むファイル」ということですよね。

>いえ、ファイルの中身に"abc"の文字列があるということです。

なるほど。とするとお書きになっているスクリプトの動作は残念ながらまとはずれです。
先のスクリプトは、標準入力から得られた dir の出力の中から abc を含む行を数えるという動作になっていると思います。しかしおおもとのUNIXシェルスクリプトでも同様の動作をすると思うのですが....


>findは中身を検索するコマンドですよね?forの中で使用するとファイル名の検索になってしまうのですか?find/?で調べた感じでは中身を検索するものだと理解したのですが・・・。

その文字列を含むファイルの数を数えるんでしょうか、それともその文字列のある行数全体を数えるんでしょうか? それによってちょっと違いますが... 

前者とすると、for でファイル名リストをループし、各1ファイルを find ではなく findstr の引数として与えて指定の文字列が存在しているかどうかを判定し、あればあった分1づつ加算する、ということで、abc を含むファイルの数を数え上げることができると思います。
後者なら、同様にして find /C にファイルを与え、その結果を積算すればいいと思います。
47.
Re4:unixのshellをバッチに変換
2004年01月08日(木) 15時17分
ユウ
>>いえ、ファイルの中身に"abc"の文字列があるということです。

>なるほど。とするとお書きになっているスクリプトの動作は残念ながらまとはずれです。>先のスクリプトは、標準入力から得られた dir の出力の中から abc を含む行を数えるという動作になっていると思います。しかしおおもとのUNIXシェルスクリプトでも同様の動作をすると思うのですが....

ごもっともです。私がシェルの方を勘違いしていました。
シェルでもlsの出力の中から検索するということでした。
ですから、私が準備していたファイルがおかしかったわけですね。
ごめんなさい。

ふぇむさん丁寧な解説ありがとうございました。24時間以上悩んでいたのが
解決して本当に助かりました。自分の馬鹿さ加減にあきれてしまいます。
またなにかありましたら、書き込まして頂きたいと思いますので、
よろしくお願いします。ありがとうございました。
 


 

32.unixのshellをバッチに変換 ユウ 04/01/07(水) 21:20
37.Re:unixのshellをバッチに変換 ふぇむ 04/01/08(木) 06:20
39.Re:unixのshellをバッチに変換 ふぇむ 04/01/08(木) 06:45
40.Re2:unixのshellをバッチに変換 ユウ 04/01/08(木) 09:40
46.Re3:unixのshellをバッチに変換 ふぇむ 04/01/08(木) 14:18
47.Re4:unixのshellをバッチに変換 ユウ 04/01/08(木) 15:17
 
 


カテゴリー「UNIXコマンドとDOS/Windows」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

2004年01月07日 14:27に投稿されたエントリーのページです。

ひとつ前の投稿は「変数に代入したパスを参照すると「指定されたファイルが見つかりません」になる」です。

次の投稿は「unixの「touch」に相当するコマンドは?」です。

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

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