• ベストアンサー

複数のファイル名の一部を変換したい

あるディレクトリにある複数のファイルの一部の文字を別の文字に置き換えたいのですが、 どのようなコマンドで実現できますか? 変換前 *AAA* absdAAAfdsad.dat fdAAAsfds.txt fdffdAAAs.sh ffdfAAAdsAfds.xx 変換後 *BBB* absdBBBfdsad.dat fdBBBsfds.txt fdffdBBBs.sh ffdfBBBdsAfds.xx 変換したいファイル名は上記のようにファイル名の長さが違いますが、 各ファイル名の一部に共通の文字列が用いられています。 ファイルが100個ぐらいあるので手作業では大変なので、 これをコマンド一発で変換したいのです。 環境はcygwinでやっています。 もしwindowsのエクスプローラやDOSコマンドで実現可能ならそちらでも教えていただけると助かります。 よろしくお願いします。

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

  • ベストアンサー
回答No.3

DOS コマンドなら、 cmd /v:on for /f "tokens=*" %A in ('dir /b') do @(set f=%A& ren "!f!" "!f:AAA=BBB!") で行けると思います。ただし、DOS では大文字小文字を区別しないので、aaAAAaa.txt のようなファイル名があると期待通りの結果にならないので、注意が必要です。 bash なら for file in *; do mv $file ${file/AAA/BBB}; done ですね。こちらは大文字小文字を区別します。

その他の回答 (2)

noname#15161
noname#15161
回答No.2

違うかもしれませんが、フリーソフトとならしってます。 ファイル名変換のリネームソフトです http://www.forest.impress.co.jp/lib/sys/file/filesearch/allrename.html

  • THX1138
  • ベストアンサー率51% (108/208)
回答No.1

cygwin はよく知りませんが Unix 系ということであれば、こんなやり方とか ls *AAA* | awk '{print "mv " $0 " " gensub(/AAA/,"BBB","g")'}' | csh なお、ls に alias で -F オプションをつけてたりする場合ははずしてください。 (実行可能ファイルが「foo*」と出てしまったりするから) まあ、Windows であればリネームソフト使う方がお手軽かもしれませんが。私はこれ使ってます。 Flexible Renamer http://www.vector.co.jp/soft/win95/util/se131133.html

関連するQ&A

  • DOSコマンドを使用せずに、ファイル名を変換したいのです。

    DOSコマンドを使用せずに、ファイル名を変換したいのです。 ファイル名を変換したいのです。 フォルダ内に、ファイル A、B、C、・・・があります これをEXCEL内にある変換表 旧ファイル名 新ファイル名   A     P   B     Q   C     R   ・     ・   ・     ・ を用いて、ファイル名を P、Q、R、・・・ に変換する方法はないでしょうか? DOSコマンドは暗号化の関係で うまく動作しません。DOSコマンドでない方法をお願いします。

  • バッチファイルの正規表現を利用した文字列検索

    お世話になっております。 表題の件について、質問させてください。 『とあるファイルに記述されている文字列を一部抜き出して、 別ファイルとして保存する』というバッチファイルを作成していますが、 うまく抜き出すことができないため、ご教示いただければ幸いです。 例) ・filelist.txt .\aaa\aaa.txt .\aaa\bbb.txt 上記ファイルに対し、「.\aaa\aaa.txt」の一行のみ取り出した 「aaafile.txt」というファイルを生成したいと考えております。 現在、私が考えたコマンドは下記になります。 for /f %%A in ('findstr /r /c:"aaa[^\\].*" filelist.txt') do echo %%A > aaafile.txt このコマンドを実行すると、「.\aaa\bbb.txt」まで抽出してしまい、 意図通りとなりません。 初歩的なミスかもしれませんが、 何卒、よろしくお願いいたします。

  • powershellのファイル名が同一検索

    とある同一フォルダ内に ファイル名 AAA-bbb.txt AAA-ccc.txt 等のファイルがあります。 AAAをキーとして、更新日時が最新の分を 読み込みたいと考えています。 どのように行えばいいのでしょうか。 よろしくお願いいたします

  • DOSコマンド COPY(複数ファイルをまとめる)

    DOSコマンドで、複数ファイルをまとめるのに COPYコマンドを使用しています。 まとめたファイル上にコメント文を加えたいのですが どうすればできるのでしょうか? 下記は、a.txtとb.txtをまとめて、c.txtにしています。 copy a.txt + b.txt c.txt だと、 そのままデータがつながってしまい、コメント文を 入れることができません。 [a.txt] aaa [b.txt] bbb  ↓ [c.txt] "Input A.txt" aaa "Input B.txt" bbb

  • テキストファイルの一部置換したファイルをたくさん作りたい

    テキストファイル(a.txt)があるのですが このファイルの一部の文字列aaaをbbbに置換したファイル(b.txt)を作りたいです。 また文字列aaaをcccに置換したファイル(c.txt)も作りたいです。 続けてd.txtやe.txt・・・と作っていきたいですが簡単にできるフリーソフトはないでしょうか? 現状はa.txtを開いてaaaをbbbに置換して、別名で保存するのを繰り返し(10回以上)するので大変です。 このようなことが楽にできるフリーソフトがあれば教えてください。

  • 複数のテキストファイルを1つにまとめる

    同一フォルダ内にある複数のテキストファイルの内容を1つにまとめる方法を探しております。 例えば、 a.txt, b.txt, c.txt が同一フォルダにあり、 それぞれの内容が AAA BBB CCC である時に、これらをまとめて matome.txtとして、その内容が AAA BBB CCC となるようなプログラムを書きたいのですが、どの様な方法が考えられますでしょうか。 上の例では3つのテキストファイルですが、実際に処理したいファイルは数百個になる為、一つ一つファイル名を入力する作業が大変で困っております。 同一フォルダ内のファイルをファイル名順に一度に読み込み、まとめる方法がありましたらお教え下さい。

  • 外部パラメータを使用したファイルの作成・書き込み

    テキストファイルに以下の内容が書かれています。 ファイルパス:/aaa/bbb/ccc ファイル名:ファイル.txt これを読み込んで $filepath = /aaa/bbb/ccc $filename = ファイル.txt となっています。 この時(「ファイル.txt」は存在しません。)、以下のような処理を行うと「/aaa/bbb/ccc」ではなく、「/aaa/bbb」に「ファイル.txt」が作成されるのですが、なぜでしょうか?? open(TXT, ">> $filepath/$filename"); flock(TXT, 2); print TXT $header; flock(TXT, 8); close(TXT); この処理の前に$filepathの値を調べましたが、確かに「/aaa/bbb/ccc」となっています。 何か注意する点や、ここが問題では?と言うようなことがあれば教えてください。

    • ベストアンサー
    • Perl
  • 一括でファイル名の一部を置換したい

    LinuxのFedora Core 10, シェルにtcshを使用しています。よろしくお願いします。 ======================================================================= 複数のディレクトリ内に、"(from home)"のような文字列を含むファイルがあり、 それらのファイル名から一括で"(from home)"という文字列を取り除きたいのですが ======================================================================= 例えば以下のように、2つのディレクトリ(Directory1,Directory2)の下に、 "(from home)"という文字列を含むファイルが2つずつある場合を考えて、 /Directory1/sample (from home).txt         sample2 (from home).txt /Directory2/ sample3 (from home).txt          sample4 (from home).txt > rename "(from home)" "" `find / -name "(from home)" -print` を試したのですが上手くいかず、 > foreach i (`find / -name "(from home)" print`) foreach? rename "(from home)" "" $i foreach? end でも上手くいきませんでした。 もしかしたらfindコマンドで見つけたファイル名をrenameコマンドに 上手く渡せていないのかと思うのですが、どのようにすれば良いのでしょうか? また別の方法でも、一括でファイル名の一部を変更する方法があれば、 ご教授お願い致します。

  • windowsバッチファイル ファイル移動

    windows2012R2で下記のようなバッチファイルを作成しました。 --------------- Set YYYY=%Date:~0,4% Set MM=%Date:~5,2% Set DD=%Date:~8,2% Set File=%YYYY%%MM%%DD% mkdir G:\bbb\xx1_%File% move G:\aaa\ttttt* G:\bbb\xx1_%File% --------------- としてもフォルダは作成されておりましたが、tttttから始まるファイル名が移動されてませんでした。 MS-DOSで move G:\aaa\ttttt* G:\bbb\xx1_20141110 とコマンドしたら、移動できたのですが。。。 どなたかお分かりの方がおりましたら、お願い致します。

  • バッチファイルに変換したいんですが

    テキストファイルをバッチファイルに変換したいんですが、 VISTAでは普通に.txtを.datに名前を変えればできるのですが XPでは名前を変えてもテキストファイルのままです。 XCOPYのコマンドを入れていてバックアップを取るための バッチファイルにする予定です。 すみませんがよろしくお願いいたします。