- ベストアンサー
【コマンドプロンプト】リストファイルを読む方法
この度はお世話になります。 コマンドプロンプトを使用し、フォルダ名が 多数書かれているtxt(リストファイル.txt)を読み込み、 リストに載っている物に対して特定の処理 (フォルダ名を小文字に変更)を行おうと考えております。 -リストファイル.txt- AAAA BBBB CCCC ---------------- まず、リストファイルを読み込んで一番初めに 書かれているAAAAフォルダの名前を変更し、 続いてフォルダBBBBの名前を変更するなどの 処理を行いたいのですが、 どのように記述を行えば教えていただけませんでしょうか
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
一応作ってみましたのでお試しください。 -- ここから @echo off FOR /F "delims=" %%i IN (リストファイル.txt) DO ( SET DNAME=%%i SET FNAME=%%i* CALL :SUB ) GOTO :EOF :SUB FOR /F %%j IN ('dir /b /l %FNAME%') DO ECHO REN %DNAME% %%j -- ここまで 最後の行に確認のためのECHOを入れてあります。 この状態で実行すると、リネームせずにリネームコマンドが表示されますので、確認してOKでしたら「ECHO」だけを削除してください。 制限として、同じ名前を含む長い名前のフォルダがあるとうまくいきません。 たとえばAAAAを処理したいときにAAAAAやAAAABといったフォルダがあってはいけません。 その理由というか今回の仕組みといいますか、小文字のファイル名を取得するには dir /l が使えます。 ただ、これがファイルであれば問題ないのですが、フォルダの場合、dir /l AAAA を実行すれば当然AAAAフォルダの配下のファイル一覧取得になります。 これだとまずいので dir /l AAAA* を実行して小文字化するという苦肉の策でございます。 まあ、重複したフォルダ名があるなら、ECHOが入ったままの状態で (このバッチファイル名).BAT > RESULT.BAT を実行して、RESULT.BATをメモ帳で適当に直してからこいつをまた実行してやればいいと思います。 ちなみに、あんまり凝ったものをやりたいのであればWSHなどを使った方が気が楽です。
その他の回答 (2)
- utakataXEX
- ベストアンサー率69% (711/1018)
大文字→小文字を一発置換するような機能はDOSのコマンドにはありません。 一発でやりたいなら何かツールを入れるか、サブバッチファイルを作るかが必要です。 因みに自分は普段はsed.exe+正規表現を使って一発置換しています。 しかし、そこまでやるのも面倒ですよね。 また大文字小文字を区別する事もDOSのコマンドの苦手分野なんです。 これも、findstr+正規表現で可能は可能ですが、処理が煩雑になるので、 「大文字小文字に関わらず、とにかく小文字にリネームする」 と言う仕様にしてはどうでしょうか? (一応、ご要望は満たせると思いますが) なので、リストファイルの中身はこうなります。 (ターゲットのフォルダ名ではなく、「こうしたい」フォルダ名にする) ↓ aaaa bbbb cccc で、バッチファイルの中身はこうなります。 getListAndRenFIle.bat REM ↓↓↓↓↓↓↓↓↓↓ここから @echo off REM 小文字のフォルダ名リストを読んで該当フォルダをリネーム FOR /F "eol=; tokens=1 delims=" %%i in (リストファイル.txt) do ( REN %%i %%i ) REM ↑↑↑↑↑↑↑↑↑↑ここまで 「このコマンドだとリネーム元と先が同じじゃないか」と疑問に思うかもしれませんが、前述のとおり、元々区別する事はできないのです。 なので、「AAAA」に対して「ren aaaa aaaa」とすると、結果は「aaaa」になります。 但し、ひょっとしたら環境に依存するかもしれません。 また、リネーム後、F5などで画面更新しないと、反映された事が見えないので注意してください。 (ちゃんと変わっています) 逆に、このトリックを使えば、リストファイルの中身を変える事で 「AAAA→aaaa」 「aaaa→AAAA」 「aAAa→Aaaa」 などなど、色々なパターンに対応できます。 因みに、フォルダ構成はこんな感じである、と言う前提です。 (ルートフォルダはどこでも構いません) ↓ C:. │ getListAndRenFIle.bat │ リストファイル.txt ├─AAAA ├─BBBB └─CCCC
お礼
お返事ありがとうございました。 コマンドプロンプトでは難しいのですね。 また別の方法も探してみます。
- 0909union
- ベストアンサー率39% (325/818)
このカテゴリーは技術者レベルなので、この程度の質問は、 http://www.google.co.jp/search?hl=ja&q=BAT+%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB&lr=lang_ja この程度でどうですか。そこに全部書いてあります。ちゃんと勉強してから投稿しようね。
お礼
お返事ありがとうございました。 早速試してみようと思います。