• ベストアンサー

ファイル名を一括してリネームする方法

今画像ファイルの整理をしているのですが、1から200まで連番をふりたいと考えています。 ですが、現状ファイル名の命名規則がバラバラに成っており困っています。 具体的には、桁数によって以下のように異なっています。 一桁   1-ファイル名.jpdg 二桁  12-ファイル名.jpeg 三桁 210-ファイル名.jpeg この冒頭の数字を全て三桁にし、1→001、12→012という形に変更したいのですが ファイル数が多いため、1個ずつファイル名を変更して0を加える方法だと時間がかかります。 一括してこのファイル名の数字を3桁に変更するいい方法があれば教えて下さい。

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

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

No9ですが、あった~、 >、"#03#"指定でできんですかね? まあ、仕 http://www.lightship.co.jp/FileVisor7/help/operation/file/renban.htm バージョン7 の操作説明書みたいですね。ファイル名の一部を使用して連番する機能ではないですね。正規表現が使えるようなので、マクロ(内部スクリプト)があれば、できるかもしれないね。まあ、普通に考えれば、検索などツール上でファイルの絞込みに使われるのでしょう。 単純な連番には対応しているので、Windowsのエクスプローラーで全部選択して名前変更で、できる連番以外なら有効につかえるでしょう。 もっと使い方を学ばないと、確かな事は言えませんが。そこで、もう少し見てみると http://www.lightship.co.jp/FileVisor7/help/operation/file/repname.htm に置き換え機能があるので、正規表現が使えそうだが、これと「連番で名前を変更する」機能を組み合わせたスクリプトが組めればいいのだが? どこかの説明に「マクロ」と記述されていた。が、メニュー見ても付属ツールみてもマクロらしきものが無い。 となる。そこまでして、使いこなすほどのソフトなんですかね? これならエクセルとVBAを取得してもらった方がよっぽど会社のためになるが。

その他の回答 (9)

回答No.9

http://okwave.jp/qa/q3835207.html http://www.lightship.co.jp/FileVisor6/help/overview/history.htm http://anago.2ch.net/test/read.cgi/software/1352806245/ この辺だろうか。まあ、よくある問題のあるアプリね。一時総務課でつかっていたなあ~~~~ 7が出てよくなったのだろうか? アプリでやると、使い込んでいないと、逆にどううしよもなく、できないことがたくさん(笑う)。 私も、わたされたが、まあ開発環境やサーバーには入れならないね。ライセンスがもったいない。 この程度の問題、金かけてどうするんでしょうね。うちの会社なら、内緒で買うか、個人で買うか。総務かも今では誰も使っていないし、なので6までしかないけどね。 ちなみに、質問内容だと「このファイル名の数字を3桁」となっていて、元のファイル名に在る数字にゼロをつけたいようなんだけど、"#03#"指定でできんですかね? まあ、仕様が明確に書いていないので、適当に割り振っても正解かもしれませんがね。 https://www.google.co.jp/search?hl=ja&q=FileVisor&lr=lang_ja#hl=ja&lr=lang_ja&psj=1&q=FileVisor%E3%80%80%22%2303%23%22+%E3%82%BC%E3%83%AD%E3%82%B5%E3%83%97%E3%83%AC%E3%82%B9&tbs=lr:lang_1ja まあ、金余って土地勝ったり、保養所たてたりするような会社なら買ってもらえるでしょうね。。まあ、それでもサーバーとか開発環境には入れたくないアイテムだね。ましてや事務専門職にしか用がないアイテムじゃね。昔のように、マシン購入時にこっそり稟議書にまぎれこませて買うしかないだろうね。「これなんだね君。」「はいテストで使います。自動化のためのソフトです」 http://www.gizcollabo.jp/vbtomo/log/archive/vbqanda_18269_0.html この程度に、初心者でも挑戦しているようなロジックなので、入門編としては最適でしょう。 まずは、何もマシンに追加しない状態で何ができるか、考えましょう。perl入れたら、そのメンテナンスしないとだめだし、過去入れて、「これ、削除していんですか?」なんて事務職員がよく聞いてくる。そんな面倒にならないように気おつけましょう。

  • bardfish
  • ベストアンサー率28% (5029/17766)
回答No.8

Windows用のファイル管理ツールにはそういうことが一括で出来る機能を有したものがあります。 私がそれを使用しているのですが、表示するときはゼロサプレスされていないファイル名でも順番通り表示されるので、リネームするファイルを選択状態にし、右クリックで「連番で名前を変更」を選択。 リネームするファイルの規則を入力して実行するとあっという間に希望通りの結果になります。 ※リネーム規則に「#03#-ファイル名.jpg」とするとゼロサプレスした連番が付与されます。 もちろん、Perlなどのスクリプトを使用しても実現できます。 でも、実行して失敗すると更に取り返しの付かない状態になるので(笑)、失敗してもいいようにコピーしてから試しましょう。 ちなみに私が使用しているファイル管理ソフトは「FileVisor」という有償ソフトです。

回答No.7

No6ですが、 まだ質問が閉じられていないようなので訂正と追加を。 6行目の >for %%a in ("*.jpg" "*,jpeg" "*.jpdg") で、"*,jpeg" => "*.jpeg" ですね。カンマになっていましたね。でJScriptもサンプルを変更してちょこっと作成してみました。 -------- c.js ----------- /* パラメーターにフルパスを指定しない場合、実行時のカレントフォルダーのみを検索して変更する。 */ var s = new ActiveXObject("Scripting.FileSystemObject"); try{ var path = WScript.Arguments.Unnamed.Item(0); } catch(para_er){ var path = s.GetAbsolutePathName("."); } // 探知用正規表現変数作成 var MyReg = new RegExp().compile("^([0-90-9]*)[-‐]"); // 拡張子で対象とするファイルのフィルター用正規表現変数作成。対象外は削除すること。 var MyRegExt = new RegExp().compile("(jpg|jpe|jpeg|jpdg)","i"); // 指定されたパスからファイルオブジェクトのコレクションを取得 var tfiles = new Enumerator(s.GetFolder(path).files); // ファイルの処理 for (;!tfiles.atEnd();tfiles.moveNext()) { var file=tfiles.item(); var ext = s.GetExtensionName(file.Name); if(null != ext.match(MyRegExt)){ WScript.echo("file=" + file.Name + " ext=[" + ext + "]"); // 探知 //var hits = file.Name.match(MyReg); // MyReg.Execute(file.Name); var hits = MyReg.exec(file.Name); if(null != hits){ if("" != hits[1]){ var tmp1="000" + hits[1]; var tmp2=tmp1.substring((tmp1.length -3), (tmp1.length + 1)); WScript.echo(" hits=[" + hits[1] + "] fix=" + tmp2 + " RegExp.rightContext=" + RegExp.rightContext + "\n"); try{ // ファイル名変更 // file.Name = tmp2 + "-" + RegExp.rightContext; }catch(ren_er){ // 変更時のエラー処理。下記は仮に同名ファイルが存在した場合 // file.Name = tmp2 + "b-" + RegExp.rightContext; } } } } } ------------------------- やはり5分程度で作成したので前回と同様、どこかにケアレスミスがありましたら、どうもすみません。適当に編集して作り変えてください。特に // でコメントアウトしている「ファイル名変更」はコメントアウトを外さないと名前が変更されません。 コマンドプロンプトを起動し >cscript //nologo "指定フォルダー フルパス" で実行することを想定しています。それで、一度リストを作成し、どのように変更されるかファイルに保存してからエディターなどで確認してから実行しましょう。 サブフォルダー以下も検索したければ、自分で改変してください。まあ、パスを指定すればできるので、変えなくてもできますが・・・ 今日は特に暇だったので、大サービスです。

回答No.6

私は、No3と同じで アプリ派です。こちらの方が、とても使い勝手があり、いろんな場合に対応可能です。 ただ、会社だと今フリーのソフト系は禁止であることが多く、承認が必要となり面倒なので、会社では、使いまわしが簡単なBATを作成させていました。初期の頃はNo4,5さんと同じようにVBS 又はJScript で作らせていましたが、最終的に、 JScript DOSによるBAT が残りました。JScriptは新人教育すると、文系の人でもなじみがあることが理由ですね。VB系は確かに学校で習うようですが、個人ではJavaScriptの使用経験が断然多いようです。 で、さらに問題になったのが、CUIでの経験のなさでPATHと言う単語も機能も理解していない。そんなのありえないだろう。と思う方がいると思うが、実はそうなんです。それが実態。そこで、DOSでのBATか、CScriptでの実行を命じています。これは教育をかねての事です。 で、そのサンプルを使用して、5分程度で作ってみました。 ------- a.cmd ------- @echo off setlocal set pic=0 set total=0 for %%a in ("*.jpg" "*,jpeg" "*.jpdg") do ( call :Permute "%%a" ) echo\ echo ReName file Count = %pic% echo Total Count = %total% goto :EOF :Permute set /a total+=1 set _tmp_name=%~n1 for /f "tokens=1,* delims=-‐" %%b in ("%~1") do ( echo %total% echo %1 set _tmp_moji1=%%b set _tmp_moji2=%%c ) rem echo b=[%_tmp_moji1%] rem echo c=[%_tmp_moji2%] set _tmp_moji3=000%_tmp_moji1% set _tmp_moji4=%_tmp_moji3:~-3% rem echo _tmp_moji4=[%_tmp_moji4%] rem 変更後のファイル名をセット set _tmp_moji5=%_tmp_moji4%-%_tmp_moji2% echo _tmp_moji5=[%_tmp_moji5%] echo\ rem ファイル名を変更する rem ren %1 %_tmp_moji5% goto :EOF endlocal ------------------ エラー処理や、多様なケースには対応していません。自分で勉強して追加してください。また、これは使い回しが容易にできるように元のパターンを崩さずに作っていますので、余計な処理というか書式になっています。 echo はでバック用として使ってください。変数チェックですね。 rem がコメントアウトなので、「ファイル名を変更する」の直下の rem を削除すると、実際にファイル名を変更してしまいます。 上記の実行には条件があり、 これは、DOS窓を起動し、対象フォルダーに移動して、そこで実行する事。区切り文字は「三桁 210-ファイル名.jpeg」のサンプルにある半角又は全角のハイフンを使用しています。拡張子は、意味不明だったので、多数列挙しています DOSコマンドをよく理解したうえで使いまわしてください。 新人教育はこの質問のよな課題をだしています。あれ、これもその課題ですかね????? これを卒業すると、初めてエクセルやパワーポイントなどのVBAに移ります。VBAを教えるわけではなく、操作と自動化というテーマですね。

noname#215107
noname#215107
回答No.5

'すみません. '訂正します。 ファイル名のハイフンは半角の"-"であることが条件です。 Option Explicit Const FOLDERPATH = "d:\test" '←名前を変更したいファイルが格納されているフォルダー名を指定(必ずフルパスで) Dim oFSO Dim oFolder Dim oFile Set oFSO = WScript.CreateObject("Scripting.FileSystemObject") Set oFolder = oFSO.GetFolder(FOLDERPATH) Dim sOldFName Dim sNewFName Dim sPriName Dim sSufName dim sfo, gfile set sfo = createobject("scripting.filesystemobject") For Each oFile In oFolder.Files sOldFName= oFile.Name sPriName = Left(sOldFName,Instr(sOldFName,"-")-1) ' "-"が←全角の場合は"-"に変更してください sSufName = Right(sOldFName,len(sOldFname)-Instr(sOldFName,"-")+1) ' "-"が←全角の場合は"-"に変更してください sNewFName = Right("00" & sPriname ,3) & sSufName If sNewFName <> sOldFName then ' WScript.Echo sNewFName set gfile = sfo.getfile(FOLDERPATH & "\" & sOldFName) gfile.name = sNewFName End If Next

noname#215107
noname#215107
回答No.4

'ツールも何もいりません。メモ帳があれば簡単にできます。VBScriptをちょこっと作ってみました。 'まずは、下のd:\testを、質問者さんのファイルが保存されているフォルダに書き換えてください。 '次に、この回答をメモ帳にコピーして、henkou.vbs等に拡張子を変えて保存してください。 '保存したhenkou.vbsをダブルクリックして実行すると全て1.txt→001.txt、 12.jpg→012.jpg等のように3桁にファイル名が変わります。 'ただし、ご質問に書いてある条件以外の例外があった場合は、動作保証はしません。 'やり直しがきかないので、かならず、ファイルのバックアップをしてから行ってください。 Option Explicit Const FOLDERPATH = "d:\test" '←名前を変更したいファイルが格納されているフォルダー名を指定(必ずフルパスで) Dim oFSO Dim oFolder Dim oFile Set oFSO = WScript.CreateObject("Scripting.FileSystemObject") Set oFolder = oFSO.GetFolder(FOLDERPATH) Dim sOldFName Dim sNewFName Dim sPriName Dim sSufName dim sfo, gfile set sfo = createobject("scripting.filesystemobject") For Each oFile In oFolder.Files sOldFName= oFile.Name sPriName = Left(sOldFName,Instr(sOldFName,".")-1) sSufName = Right(sOldFName,len(sOldFname)-Instr(sOldFName,".")+1) sNewFName = Right("00" & sPriname ,3) & sSufName If sNewFName <> sOldFName then ' WScript.Echo sNewFName set gfile = sfo.getfile(FOLDERPATH & "\" & sOldFName) gfile.name = sNewFName End If Next

  • dezimac
  • ベストアンサー率56% (2365/4208)
回答No.3

リネームソフト使えば一瞬ですよ。 大抵のソフトが桁数指定しての連番処理には対応しています。 http://www.forest.impress.co.jp/library/software/flexrenamer/ http://www.vector.co.jp/vpack/filearea/win/util/file/name/

noname#188107
noname#188107
回答No.2

昔の富士フィルムのfinpixviwerには 画像ファイル名を一括で連番に変更する 機能がありました。 質問者さんのご要望通りの変更になります。 今でも、そういうソフトは探せばあると思います。

回答No.1

3桁のものはいじらないのですね。 そうであればいじるのは1桁と2桁のものだけ。 そうなると数はそう多くはないので手作業で付け加えたほうが早いかも。(最大でも99個?)

関連するQ&A