• ベストアンサー

【コマンドプロンプト】リストファイルを読む方法

この度はお世話になります。 コマンドプロンプトを使用し、フォルダ名が 多数書かれているtxt(リストファイル.txt)を読み込み、 リストに載っている物に対して特定の処理 (フォルダ名を小文字に変更)を行おうと考えております。 -リストファイル.txt- AAAA BBBB CCCC ---------------- まず、リストファイルを読み込んで一番初めに 書かれているAAAAフォルダの名前を変更し、 続いてフォルダBBBBの名前を変更するなどの 処理を行いたいのですが、 どのように記述を行えば教えていただけませんでしょうか

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

  • ベストアンサー
  • luka3
  • ベストアンサー率74% (294/395)
回答No.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などを使った方が気が楽です。

Non201010
質問者

お礼

お返事ありがとうございました。 早速試してみようと思います。

その他の回答 (2)

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.2

大文字→小文字を一発置換するような機能は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

Non201010
質問者

お礼

お返事ありがとうございました。 コマンドプロンプトでは難しいのですね。 また別の方法も探してみます。

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.1

このカテゴリーは技術者レベルなので、この程度の質問は、 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 この程度でどうですか。そこに全部書いてあります。ちゃんと勉強してから投稿しようね。

関連するQ&A

  • コマンドプロンプトでのファイル操作について

    コマンドプロンプトでのファイル操作について、ご存知のかたどうか教えてください。 a.txt b.txtという2つのファイルがあるとします。 <a.txtの内容> 1111 2222 3333 <b.txtの内容> aaaa bbbb cccc 上記の2つのファイルを読み取りc.txtというファイルへ以下のように 出力したいのですが、コマンドプロンプト(batでも問題ありません) にてできるのでしょうか? <c.txtの内容> 1111,aaaa 2222,bbbb 3333,cccc ご教授のほど、宜しくお願いします。

  • (バッチ処理) リストファイル取得と実行

    お世話になります --ここから-- cls @echo off set $aaaa=0 set $BBBB=0 echo AAAAを読む?(Yes:1 No:0) set /P $aaaa= ^>^> echo BBBBを読む?(Yes:1 No:0) set /P $bbbb= ^>^> if /i 0 EQU %$aaaa% goto next1 start /wait "AAAA BOT" "c:\prog\p.exe" -w AAAA :next1 if /i 0 EQU %$bbbb% goto next2 start /wait "BBBB BOT" "c:\prog\p.exe" -w BBBB :next2 end --ここまで-- 今までは、上記の追記・変更で対処できましたが、 数が多くなり対処しきれなくなってきたので リスト化したtxt(リストファイル.txt)を読み込み、 リストに載っている物を順次処理を行おうと考えております。 -リストファイル.txt- AAAA BBBB CCCC DDDD ---------------- ループさせたりして管理の簡素化を図りたいと思っています どのように記述を行えばよいか教えていただけませんでしょうか よろしくお願いいたします。

  • コマンドプロンプトでファイル名変更

    コマンドプロンプトを使って C:\test.txt というファイルを今日の日付、例えば2005年3月25日だったら、 C:\20050325.txt に名前を変更するにはどのように記述したらよいでしょうか?

  • コマンドプロンプトで

    コマンドプロンプトで dir > list.txt と書いたbatファイルを作成し実行すると、中にあるフォルダ・ファイルの一覧ができますが、中にあるフォルダ名のフォルダ・ファイル名までは取得することができません。 一番下フォルダのファイル名まで取得する方法はありますでしょうか? よろしくお願いします。

  • コマンドプロンプトでフォルダの中のファイルリストの作り方

    コマンドプロンプトでフォルダのファイルリストをコマンドプロンプトで作れると聞きました。どうコマンド打ったらいいか教えてください。そのフォルダの場所は、「D:\a」です。この「a」のフォルダのリストの作りたいです。よろしくお願いします。

  • uniqとループを使用しないで、文字列のフィルターの方法

    表題の件にて、質問です。 bashでshを作成しています。いろいろ試しているのですが、 UNIXのコマンドで、uniqコマンドがありますが、それと同じことをsed又は、awk等を使用して、作成することは可能でしょうか? 作成が可能であれば、記述方法を教えてくださいませ。 ※ループ文を使用しないで、出来るだけ完結なコマンド文にしたい。 例: file.txt 以下中身 ---------------------- AAAA BBBB BBBB CCCC CCCC ----------------------- ↓ AAAA BBBB CCCC の3文字のみを出力したい。 ご存知の方いらっしゃいましたら、ご教示ください。

  • コマンドプロンプトで

    コマンドプロンプトで、  findstr /n aaaa test1.txt > test2.txt とすると、検索した"aaaa"の行がtest2.txtに保存されますが、  findstr /n aaaa test1.txt > test1.txt とするとtest1.txtのデータがなくなります。 これは何故かということと、検索結果を検索したファイルに保存する方法を教えてください。 お願いします。

  • コマンドプロンプト

    コマンドプロンプトで下記の処理がしたいです。 複数のフォルダに同じファイル名(INDEX.txt)が存在しております。 フォルダA   INDEX.txt フォルダB   INDEX.txt ... フォルダZ   INDEX.txt INDEX.txtの中身以下の状態です。 (フォルダBならAの部分がB)  0001,フォルダA,  0002,フォルダA,  ...  0100,フォルダA, これに対して一括の処理で下記のように1行目に「0000」を書き加えたいです。  0000  0001,フォルダA,  0002,フォルダA,  ...  0100,フォルダA, どなたか、詳しい方お教え頂ければと思います。 宜しくお願い致します。

  • 以下の様なファイルの中身から重複を取り除いて表示したいのですが、

    以下の様なファイルの中身から重複を取り除いて表示したいのですが、 awk 'NR==1||prev!=$0;{prev=$0}' file.txt の使い方を教えてください。 何故、重複を除いて表示できるのですが。 printなどを使っていないのに表示ができているのですか。 file.txt 以下中身 ---------------------- AAAA BBBB BBBB CCCC CCCC ----------------------- ↓ AAAA BBBB CCCC の3文字のみを出力したい。

  • UNIXのコマンドを教えて下さい。

    AAAAという名前のテキストファイルにBBBBという文字列が含まれる行の最後に CCCCの文字列を追加したい場合、どのようなコマンドを使ったらよいでしょうか?

専門家に質問してみよう