- ベストアンサー
大量のファイルの名前を一括して変更する方法とは?
- 大量のファイルの名前を一括で変更する方法について解説します。ファイル名の変更作業を手作業で行うと時間がかかるため、効率的な方法を紹介します。
- 本のデータベースをcsvファイルに落とした際、ファイル名の形式が特定の規則になっている場合、一括で変更することが可能です。具体的な変更方法について解説します。
- Windows 10を使用している場合、Excelなどのオフィス製品を利用することで、大量のファイル名を一括で変更できます。ファイルの規則性や数値部分の任意性に対応する方法も紹介します。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
失礼しました。 「VBScript」による回答ですので「Windows限定」です。 このプログラムは、5行目の f = "D:\Programming\csv_00\Rename\" に存在するフォルダ内の「~.jpg」ファイルを、「csv」ファイルに基づいて変更します。 ただ、単純に「m123456789123456780.jpg」→「1-1.jpg」、「m023456789123456789.jpg」→「1-2.jpg」、・・・という処理をしているだけで、「日本史」のデータは無視してします(「連番」は利用しています)。 今は、「~.jpg」ファイルと「~.csv」ファイルは同じフォルダ内、という想定ですが、適当に質問者の環境に合わせてください。 以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。 「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず、半角です。 できたプログラムファイルを、質問者の環境に合わせてから、ダブルクリック(「シングルクリック」→「Enter」の方が確実)するだけです。 最後に「Finished!」と表示しますので、「OK」を押して、終了してください。 Option Explicit Dim a, cv, f, gf, i, m, so, x Set so = CreateObject("Scripting.FileSystemObject") gf = so.GetParentFolderName(WScript.ScriptFullName) f = "D:\Programming\csv_00\Rename\" Set cv = so.OpenTextFile(f & "\Rename.csv", 1) x = cv.ReadLine Do Until cv.AtEndOfStream a = Split(cv.ReadLine, ",") For i = 2 to UBound(a) If so.FileExists(a(i)) = True Then Set m = so.GetFile(gf & "\" & a(i)) m.Name = a(0) & "_" & CStr(i - 1) & ".jpg" Set m = Nothing End If Next Loop cv.Close Set cv = Nothing Set so = Nothing MsgBox("Finished!") 5行目の「f = "D:\Programming\csv_00\Rename\"」を、「~.jpg」が存在するフォルダですので、質問者の環境に合わせてください。 Set cv = so.OpenTextFile(f & "\Rename.csv", 1) 今は、「~.jpg」ファイルが存在するフォルダ内の「Rename.csv」ファイルを読み込み専用に開いています。 こちらも「"D:\Programming\~.cvs"」などと、質問者の環境に合わせてください。 7行目の「x = cv.ReadLine」は、1行目が項目行という想定なので、1行読み飛ばしています。 もし、項目行が存在しない場合は、この行を削除してください。 実際のデータは 連番,書名,画像1ファイル名,画像2ファイル名 1,日本史,m123456789123456780.jpg,m023456789123456789.jpg 2,世界史,m123456780123456789.jpg, 3,神学論,m123406789123456789.jpg,m123456789123056789.jpg という形であることを想定していますが、横にもっと「~.jpg」が増えても、問題なく「3-3.jpg」、「3-4.jpg」、・・・などと処理します。
その他の回答 (8)
- Prome_Lin
- ベストアンサー率42% (201/470)
「VBScript」による回答です。 エクセルは全く使っていません。 このプログラムは、これから処理したい「csv」ファイルを1つだけ、プログラムファイルにドラッグ&ドロップすると、ドラッグ&ドロップした「csv」ファイルと同じフォルダに、たとえば「abc.csv」という名前のファイルをドラッグ&ドロップした場合、「abc(Result).csv」という結果ファイルを作成します。 なお、1行目はタイトル行という想定ですが、1行目からデータの場合は、13行目と14行目の x = cv.ReadLine cr.WriteLine x を、削除してください。 また、列は4列限定で作成してしまっています。 以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。 「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず、半角です。 できたプログラムファイル(「~.vbs」ファイル)に、これから処理したい「csv」ファイルを1つだけ、ドラッグ&ドロップするだけです。 最後に「Finished!」と表示しますので、「OK」を押して、終了してください。 Option Explicit Dim a, cr, cv, e, f, i, n, so, wa, x Set so = CreateObject("Scripting.FileSystemObject") Set wa = WScript.Arguments If wa.Count <> 1 or LCase(so.GetExtensionName(wa(0))) <> "csv" Then MsgBox("ドラッグ&ドロップできるのは、csvファイル1つだけです") WScript.Quit End If f = so.GetParentFolderName(wa(0)) n = so.GetBaseName(wa(0)) Set cv = so.OpenTextFile(wa(0), 1) Set cr = so.OpenTextFile(f & "\" & n & "(Result).csv", 2, True) x = cv.ReadLine cr.WriteLine x Do Until cv.AtEndOfStream a = Split(cv.ReadLine, ",") For i = 2 to 3 If a(i) <> "" Then e = so.GetExtensionName(a(i)) a(i) = a(0) & "-" & CStr(i - 1) & "." & e End If Next cr.WriteLine Join(a, ",") Loop cv.Close cr.Close Set cv = Nothing Set cr = Nothing Set wa = Nothing Set so = Nothing MsgBox("Finished!") 説明が、必要でしたら、言ってください。
お礼
私が理解できていないのかもしれませが。 最終的な目的は「別フォルダにあるjpgファイルの名前を変更すること」です。csvファイルをつくることではありません。 回答は質問に合致していますでしょうか?ありがとうございます。
- okwavey2
- ベストアンサー率15% (251/1593)
>その方面は全くダメです。 それは残念ですね。 では、希望の機能を作って貰うと良いと思います。 簡単なんで個人の人なら5000円もしないでやってくれる人もいると思いますよ。
お礼
ありがとうございます。
- NuboChan
- ベストアンサー率47% (785/1650)
>以下、2列目以下に式をコピペする。 失礼しました。 以下に訂正します。 以下、2行目以下に式をコピペする。
お礼
ありがとうございました。
- NuboChan
- ベストアンサー率47% (785/1650)
Nobu-Wさんの数式を真似して 実際、作ってみました。 CSVをEXCELに読み込んで D,Fに列を挿入して式を入力 =if(c1="","",ROW()&"-1.jpg) =if(E1="","",ROW()&"-2.jpg) 以下、2列目以下に式をコピペする。 Sheet2に式を作成 =Sheet2!C1 =Sheet2!D1 以下、2列目以下に式をコピペする。 Sheet3に式を作成 =Sheet3!E1 =Sheet2!F1 以下、2列目以下に式をコピペする。 不必要な行がある場合(0の場合)は、行を削除 これで作成されたリストで先に記載したURL 『複数のファイル名をそれぞれ別のファイル名に一括変換する方法』 が利用できる、。 ------------------------ 参考画像 https://imgur.com/d91AYmM
お礼
ありがとうございました。
- Nobu-W
- ベストアンサー率39% (725/1832)
はじめのCSVのデ~タをエクセルに取り込んで、そのデ~タシ~ト名がSheet1 だったとして・・・sheet2で作業・・・ sheet2のA1のセルに『=IF(Sheet1!A1="","",Sheet1!A1)』として sheet2のA2のセルに『=IF(Sheet1!B1="","",Sheet1!B1)』 sheet2のA3のセルに『=IF(Sheet1!C1="","",ROW()&"-1.jpg")』 sheet2のA4のセルに『=IF(Sheet1!D1="","",ROW()&"-2.jpg")』 でもって、そのsheet2のA1セルからA4セルをコピ~して、下に必要な行数分 ペ~ストします Sheet2が完成したら、Sheet2のデ~タを全部選択して、コピ~します それを、Sheet3のA1セルでマウス右クリック、『形式を選択して貼り付け』 で値を選択すると・・・値として貼り付けが完了しますので・・・ これをCSVで保存! 使えないですか? 注意なんですが ROWコマンドは行数を拾うコマンドなので、欠番があれば使えないです
お礼
新旧ファイル名の対応表(テーブル)をつくる手順ですね? ありがとうございました
- NuboChan
- ベストアンサー率47% (785/1650)
質問の意味が良くわからないが、 つまり、 m123456789123456780.jpg を変名して 1-1.jpeg m023456789123456789.jpg を変名して 1-2.jpeg にしたいとの事ですよね? >m123456789123456789.jpgの規則性があるものの、数値部分が任意です。 jpegファイルの規則性と言っても 先頭がm 文字数が19 だけで 18桁の数値に規則性が無いのでは、そのものズバリを変換するのは無理があります。 ターゲットのCSVファイルをEXCEに読み込ませて数式を利用して ターゲットファイル名を変換ファイル名にするリストを作成する必要があります。 同じ行(行番号=1)にm123456789123456780.jpgの隣に仮セルを挿入して数式で1-1.jpeg等を作成するのがキモになります。 1行出来れば後は、下部へ数式をコピペ。 それさえ出来れば、下記が利用できます。 複数のファイル名をそれぞれ別のファイル名に一括変換する方法 https://discommunication.info/log/2017/06/07/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%82%92%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E5%88%A5%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%AB%E4%B8%80%E6%8B%AC%E5%A4%89%E6%8F%9B/ 私は、EXCELマスターでは無いので他の人に頼んだほうが解決は早いです。 ROW,COLUMN関数を使ったIF文かな ?
お礼
回答は元のファイル名と変換したいファイル名の対応表(テーブル)をエクセルで作り、テーブルを利用してマクロでファイル名を変換するということですね? かなり難しそうです。 ありがとうございました。
- aokii
- ベストアンサー率23% (5210/22062)
ファイルの名前を一括変更 1.2という無料ソフトをダウンロードして変換するのがお勧めです。 https://www.vector.co.jp/download/file/winnt/util/fh666807.html
お礼
例えば、 1・日本史・m123456789123456780.jpg・m023456789123456789.jpg m123456789123456780.jpg → 1-1.jpg m023456789123456789.jpg → 1-2.jpg 以上のような関係性を維持したまま【別のフォルダ内にあるjpgの】ファイル名を変更します。 ありがとうございました。
- okwavey2
- ベストアンサー率15% (251/1593)
自分でスクリプト書いて対応するしかなさそうな内容ですね。 Excelである必要はないですが、CSVファイルを表で開いて、列ごとにコピペできるものがあると良いですね。 openOfficeかなんかで良いでしょう。 コピペを組み合わせて、コマンドブロンプトでのファイル名変更するバッチファイルを作成したら、必要な知識はかなり少ない。 https://www.adminweb.jp/command/file/index3.html こういうコマンドがCSVのデータの件数並んだファイルを作ったら良いですね。 ミスすることも考えて、変更前のファイルのバックアップも取っておきましょう。 バッチについてはこの辺ですね。 https://qiita.com/sawa_tsuka/items/4703a9743777d4ea30de
お礼
その方面は全くダメです。 ありがとうございました。
お礼
友人にプログラムに詳しいものがおり、手伝ってくれました。キーボードマクロを使ってバッチファイルを作りました。望む結果が得られました。 丁寧な回答に感謝です。 ありがとうございました