2010-09-27 125 views
15

我想重命名WinXP系統上的文件夾中的大量文件,最好使用批處理文件。如何創建批文件以重命名文件夾中的大量文件?

文件被命名爲目前像這樣:

Vacation2010 001.JPG
Vacation2010 002.JPG
Vacation2010 003.JPG

,我想將其更改爲:

December December 001.jpg
De cember 002.jpg
December 003.jpg

我該如何執行此操作?

+0

你可能喜歡[XYplorer(http://www.xyplorer.com/),我用了几几年之後,直到我在家中停止使用Windows。它有一個批量重命名界面來處理這種情況,而不需要編程,而且非常值得花錢。 – 2010-09-27 22:46:56

+1

@Roger批量重命名實用程序(http://www.bulkrenameutility.co.uk)是一個非常好的工具,它是免費的。 – bluish 2011-01-24 14:24:56

回答

9
dir /b *.jpg >file.bat 

這會給你行如:

Vacation2010 001.JPG
Vacation2010 002.JPG
Vacation2010 003.JPG

編輯file.bat在favorite Windowstext-editor,這樣做相當於:

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

這是一個regex;許多編輯支持他們,但沒有任何Windows默認(據我所知)。你也可以得到一個命令行工具,比如sed或perl,它們可以在命令行轉義之後採用我上面的確切語法。

產生的線條看起來像:

重命名 「Vacation2010 001.JPG」 「十二月001.JPG」
重命名 「Vacation2010 002.JPG」 「十二月002.JPG」
重命名「Vacation2010 003.jpg「」December 003.jpg「

您可能會將這些行識別爲重命名命令,即原始列表中的每個文件一行。 ;)在cmd.exe中運行該批處理文件。

+1

dir/b標誌是非常有用的,不是嗎? – 2010-09-27 22:24:36

+0

@Jim:不像cygwin下的* ls *那麼有用! :)目錄/秒也undereppreciated。 – 2010-09-27 22:26:11

+3

操作系統很可能需要這樣的技巧來簡單地重命名一組文件,不是嗎? – bluish 2011-01-24 14:23:09

6

你可以做到這一點很容易,無需人工編輯或使用花哨的文本編輯器。這是一個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 
23
@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內文件名。

+0

要重命名所選文件,我們可以指定文件名爲AB.jpg,ABC.jpg,ABCD.jpg嗎? – 2016-08-17 14:24:30

1
@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]你有你想改變[或刪除]字符串和_with以字符串值改變_toEdit值相同的工作,你想要替代_toEdit [SET "_with="如果您只是想擦除在_toEdit中指定的字符串]。

0

你並不需要一個批處理文件,只是這樣做從PowerShell的:

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