使用 Windows 批处理命令重命名文件夹内的多个文件

使用 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 运行。

如果有人有想法,请分享。感谢您的时间。

答案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"

    )

)

相关内容