これは、 ここ にある投稿を取得し、物事を少し回転させています。通常、フォルダ内のいくつかの画像の名前を、それらが含まれているフォルダの名前に変更してから、接尾辞「photo1」、「photo2」などを追加しようとしています。
言い換えれば、私はここから行こうとしています:
Folder1
IMG_001.jpg
IMG_001.jpg
IMG_003.jpg
ここへ:
Folder1
Folder1_photo1.jpg
Folder1_photo2.jpg
Folder1_photo3.jpg
キャッチには、これらの「フォルダ」フォルダが数百あり、それぞれのフォルダ内の写真の名前を変更する必要があります。
これを実行できるサードパーティのソフトウェアがあることは知っていますが、これをWindows.batとして実行する方法を探しています。
誰かアイデアがあれば共有してください。御時間ありがとうございます。
すべてのフォルダーが同じルートフォルダーにあり、すべての画像がテンプレート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倍にすることを忘れないでください。
Batchを要求されたようですが、PowerShellが役立つ場合もあります
Get-Childitem "C:\my\folder\" -Recurse -Include *.jpg | ForEach {
Rename-Item $_ "$($_.Directory.Name)_$($_.Name -ireplace "img_(0+)", "photo").jpg
}
どれくらい近づく必要がありますか?
これでうまくいくはずですが、数字の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
パターン]のみを検索するようになりました。
はるかに単純なアプローチ。これが機能するかどうかはわかりませんが、試してみてください。
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"
)
)
Irfanviewと呼ばれるいくつかのソフトウェアを見てください。高度な一括名前変更、サイズ変更、変換などのユーティリティが多数組み込まれています。私はそれがあなたが望むことをするだろうと思います。