如何创建批处理文件以重命名文件夹中的大量文件?

Posted

技术标签:

【中文标题】如何创建批处理文件以重命名文件夹中的大量文件?【英文标题】:How do I create batch file to rename large number of files in a folder? 【发布时间】:2011-04-18 00:06:53 【问题描述】:

我想重命名 WinXP 系统上文件夹中的大量文件,最好使用批处理文件。

文件当前命名如下:

假期2010 001.jpg 假期2010 002.jpg 假期2010 003.jpg

我想将它们更改为:

12 月 001.jpg 12 月 002.jpg 12月003.jpg

我该如何执行这个操作??

【问题讨论】:

您可能会喜欢XYplorer,我用了几年,直到我在家里停止使用 Windows。它有一个批量重命名接口,无需编程即可处理这种情况,而且物有所值。 @Roger Also Bulk Rename Utility (bulkrenameutility.co.uk) 是一个非常好的工具,而且它是免费的。 【参考方案1】:
dir /b *.jpg >file.bat

这将为您提供如下行:

假期2010 001.jpg 假期2010 002.jpg 假期2010 003.jpg

在favorite Windowstext-editor 中编辑 file.bat,相当于:

s/Vacation2010(.+)/rename "&" "December \1"/

那是regex;许多编辑器都支持它们,但没有一个是 Windows 默认的(据我所知)。您还可以获得一个命令行工具,例如 sed 或 perl,在转义为命令行后,它们可以采用我上面的确切语法。

生成的行将如下所示:

重命名“Vacation2010 001.jpg”“December 001.jpg” 重命名“Vacation2010 002.jpg”“12 月 002.jpg” 重命名“Vacation2010 003.jpg”“12 月 003.jpg”

您可以将这些行识别为重命名命令,原始列表中的每个文件一个。 ;) 在 cmd.exe 中运行该批处理文件。

【讨论】:

dir 的 /b 标志非常有用,不是吗? @Jim:不如cygwin下的ls好用! :) dir /s 也被低估了。 操作系统需要这样的技巧来简单地重命名一组文件,这很糟糕,不是吗?【参考方案2】:

您无需手动编辑或使用精美的文本编辑器即可轻松完成此操作。这是一个 vbscript。

Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder="c:\test"
Set objFolder = objFS.GetFolder(strFolder)
For Each strFile In objFolder.Files
    If objFS.GetExtensionName(strFile) = "jpg" Then    
        strFileName = strFile.Name
        If InStr(strFileName,"Vacation2010") > 0 Then           
            strNewFileName = Replace(strFileName,"Vacation2010","December")
            strFile.Name = strNewFileName
        End If 
    End If  
Next 

另存为 myscript.vbs 和

C:\test> cscript //nologo myscript.vbs 

【讨论】:

【参考方案3】:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=Vacation2010
SET new=December
for /f "tokens=*" %%f in ('dir /b *.jpg') do (
  SET newname=%%f
  SET newname=!newname:%old%=%new%!
  move "%%f" "!newname!"
)

它的作用是遍历批处理文件所在文件夹中的所有 .jpg 文件,并将文件名中的 Vacation2010 替换为 December。

【讨论】:

只重命名选定的文件,我们可以像 AB.jpg、ABC.jpg、ABCD.jpg 这样指定文件名吗?【参考方案4】:
@ECHO off & SETLOCAL EnableDelayedExpansion

SET "_dir=" REM Must finish with '\'
SET "_ext=jpg"
SET "_toEdit=Vacation2010"
SET "_with=December"
FOR %%f IN ("%_dir%*.%_ext%") DO (
    CALL :modifyString "%_toEdit%" "%_with%" "%%~Nf" fileName 
    RENAME "%%f" "!fileName!%%~Xf"
)
GOTO end

:modifyString what with in toReturn
    SET "__in=%~3"
    SET "__in=!__in:%~1=%~2!"
    IF NOT "%~4" == "" (
        SET %~4=%__in%
    ) ELSE (
        ECHO %__in%
    )
    EXIT /B

:end

此脚本允许您更改包含 Vacation2010 的所有文件的名称,但名称相同,但使用 December 而不是 Vacation2010

如果您复制并粘贴代码,则必须将.bat 保存在照片的同一文件夹中。 如果要将脚本保存在另一个目录 [E.G.您有一个最喜欢的实用程序文件夹] 您必须将 _dir 的值更改为照片的路径。

如果您必须对其他照片 [或其他文件 changig _ext] 执行相同的工作,您必须使用要更改的字符串 [或擦除] 更改 _toEdit 的值和 @987654329 的值@ 使用您要放置的字符串,而不是 _toEdit [SET "_with=",如果您只是想删除 _toEdit 中指定的字符串]。

【讨论】:

【参考方案5】:

您不需要批处理文件,只需从 powershell 执行此操作:

powershell -C "gci | % rni $_.Name ($_.Name -replace 'Vacation2010', 'December')"

【讨论】:

以上是关于如何创建批处理文件以重命名文件夹中的大量文件?的主要内容,如果未能解决你的问题,请参考以下文章

bat批处理:根据文本文件批量重命名文件

为文件夹中的每个文件创建文件夹,并使用 cmd 或批处理从 CSV 命名文件夹

如何用批处理命令创建一个以“日期”+读取粘贴板数据命名的文件夹?

使用批处理文件重命名和格式化 Excel 工作表

批处理:批量重命名父文件夹下所有子文件夹里的文件

怎样利用批处理自动删除某路径下的过期文件夹