• ベストアンサー

perl -p -i.bak -e "!a!A!g" *

をコマンドラインで実行すると ファイルをオープンできないとのエラーが出ます。 ちなみに perl -p -i.bak -e "!a!A!g" x.txt ならばOKです。 ディレクトリ内のすべてのフィルに適用したいのですがどうしたらいいでしょうか? WindowsXP に最新版のPerlを入れて実行しています。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

perl -i.bak -p -e "BEGIN{@ARGV=split('\0',`perlglob @ARGV`)}s/a/A/g" * のようにしてみて下さい。 たびたびこういうことが必要なら、バッチとPerl を使って簡略化すればいいと思います。

reiman
質問者

お礼

ありがとうございます。 そうします。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

UNIX ならシェルが展開するんだけど DOS とか Windows だと自分で展開しなきゃならない. なので, ちょっと意味が変わるけどこれが一番近いかな? for /F "delims=: tokens=*" %f in ('dir /B /A-D') do @perl -p -i.bak -e "!a!A!g" "%f" UNIX に翻訳すると for f in `dir *`; do perl -p -i.bak "!a!A!g" "$f"; done のような感じ.

reiman
質問者

お礼

ありがとうございます。 とにかく簡単にはできないことがわかりました。

すると、全ての回答が全文表示されます。
noname#25358
noname#25358
回答No.1

 マイクロソフト系のOSはワイルドカード展開をアプリケーション側で行うからです。  Perl に対して "*" というファイル名がそのまま渡ってしまうため、それをオープンできずにエラーになってしまうのです。  Unix 系のOSは、ほとんどのケースではシェル側で展開するんですよね。たしか。

reiman
質問者

お礼

ありがとうございます。 何か対処方法はないでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A