如何创建批处理文件以重命名文件夹中的大量文件?
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')"
【讨论】:
以上是关于如何创建批处理文件以重命名文件夹中的大量文件?的主要内容,如果未能解决你的问题,请参考以下文章
为文件夹中的每个文件创建文件夹,并使用 cmd 或批处理从 CSV 命名文件夹