这是位于这里并稍微调整一下。通常,我会尝试将文件夹中的几张图片重命名为它们所在文件夹的名称,然后添加后缀“photo1”、“photo2”等。
换句话说,我正尝试从这里出发:
Folder1
IMG_001.jpg
IMG_001.jpg
IMG_003.jpg
到这里:
Folder1
Folder1_photo1.jpg
Folder1_photo2.jpg
Folder1_photo3.jpg
发现有数百个这样的“文件夹”文件夹,每个文件夹都需要重命名里面的照片。
我知道有第三方软件可以做到这一点,但我正在寻找一种方法将其作为 Windows .bat 运行。
如果有人有想法,请分享。感谢您的时间。
答案1
假设所有文件夹都在同一个根文件夹中,并且所有图像都与模板 IMG_n.jpg 匹配,则以下一行程序应该可以在命令行上运行:
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
我看到你问批但其他人可能会发现 PowerShell 很有用
Get-Childitem "C:\my\folder\" -Recurse -Include *.jpg | ForEach {
Rename-Item $_ "$($_.Directory.Name)_$($_.Name -ireplace "img_(0+)", "photo").jpg
}
答案3
你需要靠多近?
这应该可以做到,但它会保留数字中的 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
它以使其实际运行。首先进行备份,验证您是否满意,没有撤消等)。
如果您确实需要 1 而不是 001,我想不出一个好的替代方案。替换 00 可能会更改名称中也有数字的名称,并且如果数字不连续,计数就会中断。
[编辑:从另一个答案中摘录,我假设图片是文件夹中唯一的东西。现在只查找img_*.jpg
图案]。
答案4
这是一个更简单的方法。我不确定这是否有效,但请尝试一下。
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"
)
)