web-dev-qa-db-ja.com

Windowsバッチコマンドを使用して、フォルダー内の複数のファイルの名前を変更する

これは、 ここ にある投稿を取得し、物事を少し回転させています。通常、フォルダ内のいくつかの画像の名前を、それらが含まれているフォルダの名前に変更してから、接尾辞「photo1」、「photo2」などを追加しようとしています。

言い換えれば、私はここから行こうとしています:

Folder1
  IMG_001.jpg
  IMG_001.jpg
  IMG_003.jpg

ここへ:

Folder1
  Folder1_photo1.jpg
  Folder1_photo2.jpg
  Folder1_photo3.jpg

キャッチには、これらの「フォルダ」フォルダが数百あり、それぞれのフォルダ内の写真の名前を変更する必要があります。

これを実行できるサードパーティのソフトウェアがあることは知っていますが、これをWindows.batとして実行する方法を探しています。

誰かアイデアがあれば共有してください。御時間ありがとうございます。

2
user3413088

すべてのフォルダーが同じルートフォルダーにあり、すべての画像がテンプレートIMG_n.jpgと一致すると仮定すると、次の1つのライナーがコマンドラインで機能するはずです。

for /d %A in ("yourRootPath\*") do @for %B in ("%A\img_*.jpg") do @for /f "tokens=1* delims=_0" %C in ("%~nB") do ren "%B" "%~nxA_photo%D.jpg"

バッチスクリプトでコマンドを使用する場合は、パーセントを2倍にすることを忘れないでください。

4
dbenham

Batchを要求されたようですが、PowerShellが役立つ場合もあります

Get-Childitem "C:\my\folder\" -Recurse -Include *.jpg | ForEach {             
    Rename-Item $_ "$($_.Directory.Name)_$($_.Name -ireplace "img_(0+)", "photo").jpg
}
2
nixda

どれくらい近づく必要がありますか?

これでうまくいくはずですが、数字の0は維持されます。 folder1_photo001.jpgの代わりにfolder1_photo1.jpg

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

for /d %%d in (*) do (

    for %%f in ("%%d/img_*.jpg") do (
        set fname=%%f
        set fname=!fname:IMG_=photo!
        echo ren "%%d/%%f" "%%d/%%d_!fname!"
    )
)

(これにより、実行する名前変更コマンドが出力されます。echoを削除して、実際に実行させます。最初にバックアップを作成し、問題がないことを確認します。元に戻すことはできません)。

001の代わりに1が必要な場合、良い代替案を考えることはできません。00を置き換えると、名前に数字が含まれている場所でも名前が変更されるリスクがあり、数字が連続していない場合はカウントアップが失敗します。

[編集:別の答えからつまんで、私は写真だけがフォルダにあると思っていました。 img_*.jpgパターン]のみを検索するようになりました。

1

はるかに単純なアプローチ。これが機能するかどうかはわかりませんが、試してみてください。

cd "path of the folder that contains the photos"

for /L %%n in (1 1 %random%) do (

    for %%f in (*.jpg) do (

        rename "%%f" "photo_%%n.jpg"

    )

)
0
modex

Irfanviewと呼ばれるいくつかのソフトウェアを見てください。高度な一括名前変更、サイズ変更、変換などのユーティリティが多数組み込まれています。私はそれがあなたが望むことをするだろうと思います。

0
RecentCoin