如何创buildbatch file来重命名文件夹中的大量文件?

我想重命名WinXP系统上的文件夹中的大量文件,最好使用batch file

这些文件目前是这样命名的:

Vacation2010 001.jpg
Vacation2010 002.jpg
Vacation2010 003.jpg

我想把它们改成:

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

我怎样才能执行这个操作?

@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文件,并用文件名中的12替换Vacation2010。

 dir /b *.jpg >file.bat 

这会给你如下行:

Vacation2010 001.jpg
Vacation2010 002.jpg
Vacation2010 003.jpg

在你最喜欢的Windows 文本编辑器中编辑file.bat,做相当于:

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

这是一个正则表达式 ; 许多编辑支持他们,但没有任何默认的Windows(据我所知)。 你也可以得到一个命令行工具,比如sed或者perl,在命令行转义之后,可以使用上面的语法。

结果行将如下所示:

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

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

你可以轻松地做到这一点,无需手动编辑或使用奇特的文本编辑器。 这是一个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 
 @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保存在照片的相同文件夹中。 如果您想将脚本保存在另一个目录中[EG您有一个最喜欢的工具文件夹],您必须使用照片的路径更改_dir的值。

如果您必须为其他照片[或其他文件changig _ext ]执行相同的工作,则必须使用要更改[或擦除]的字符串和_with的值来更改_with的值,而将_with的值_toEdit [ SET "_with="如果你只是想擦除在_toEdit指定的字符串]。

您不需要批处理文件,只需从PowerShell中执行此操作即可:

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