2013-06-24 173 views
17

如果我在一個目錄中有多個文件,並且想要將某些內容附加到它們的文件名中,但不是擴展名,那我該如何做?在cmd中重命名多個文件

我曾嘗試以下,以測試文件file1.txtfile2.txt

ren *.txt *1.1.txt 

這將重命名文件file1.1.txtfile2.txt1.1.txt

我要的文件是file1 1.1.txtfile2 1.1.txt

威爾這可能從CMD或我需要有一個bat文件來做到這一點?那麼PowerShell呢?

+0

是有很多的文件? –

+0

Theres約90在一個文件夾中 – Morne

+1

如果你願意,你也可以用UI來做到這一點。選擇所有文件,將其重命名爲「文件」,它將顯示爲文件(1),文件(2),文件(3),文件(4)等。 – Gray

回答

16
for /f "delims=" %%i in ('dir /b /a-d *.txt') do ren "%%~i" "%%~ni 1.1%%~xi" 

如果使用簡單for迴路中無需/f參數,已重命名的文件將被再次改名。

+1

」%%〜ni 1.1 %%〜xi「中的'〜n'代表什麼?我不明白它是如何工作的... – ocrampico

2

試試這個Bulk Rename Utility它運作良好。也許不會重新發明輪子。如果你不需要腳本,這是一個好方法。

3
@echo off 
for %%f in (*.txt) do (
    ren "%%~nf%%~xf" "%%~nf 1.1%%~xf" 
) 
+0

對於有人不會運行:對於(* .txt)中的%f做(ren「%〜nf%〜xf」「%〜nf 1.1%〜 xf「) – nyconing

16

確保有更多的?以外還有名字最長字符:

ren *.txt "???????????????????????????? 1.1.txt" 

更多信息,請參見How does the Windows RENAME command interpret wildcards?

新的解決方案 - 2014年12月1日

對於那些誰像正則表達式,有JREN.BAT - 混合的JScript /批處理命令行實用工具,將在從XP向前任何版本的Windows上運行。

jren "^.*(?=\.)" "$& 1.1" /fm "*.txt" 

jren "^(.*)(\.txt)$" "$1 1.1$2" /i 
+1

+1'????????????????????????????'你知道文件名可以存在多長時間嗎?是嗎? –

+3

絕對最大文件名長度爲255個字符。但是大多數場景的實際限制較少,因爲Windows UI支持的最大總路徑長度爲259個字符。總路徑長度包括音量,文件夾和文件名稱信息以及空終止符。有關更多信息,請參見http://msdn.microsoft.com/en-us/library/aa365247.aspx。 – dbenham

+0

感謝您介紹jren,這正是我所需要的,簡單快速。順便說一下,它可以使用[簡寫字符類](http://www.regular-expressions.info/shorthand.html),如'\ d'或'\ w'。 – Armfoot

0

我被這個困惑也...不喜歡把窗戶當你在批量重命名的括號內。在我的研究中,我決定用PowerShell編寫腳本。超級簡單,像魅力一樣工作。現在我可以使用它,每當我需要批處理文件重命名...這是頻繁的。我拍數百張照片和相機命名他們IMG1234.JPG等等

這裏是我寫的劇本:

# filename: bulk_file_rename.ps1 
# by: subcan 
# PowerShell script to rename multiple files within a folder to a 
# name that increments without (#) 
# create counter 
$int = 1 
# ask user for what they want 
$regex = Read-Host "Regex for files you are looking for? ex. IMG*.JPG " 
$file_name = Read-Host "What is new file name, without extension? ex. New Image " 
$extension = Read-Host "What extension do you want? ex. .JPG " 
# get a total count of the files that meet regex 
$total = Get-ChildItem -Filter $regex | measure 
# while loop to rename all files with new name 
while ($int -le $total.Count) 
{ 
    # diplay where in loop you are 
    Write-Host "within while loop" $int 
    # create variable for concatinated new name - 
    # $int.ToString(000) ensures 3 digit number 001, 010, etc 
    $new_name = $file_name + $int.ToString(000)+$extension 
    # get the first occurance and rename 
    Get-ChildItem -Filter $regex | select -First 1 | Rename-Item -NewName $new_name 
    # display renamed file name 
    Write-Host "Renamed to" $new_name 
    # increment counter 
    $int++ 
} 

我希望這是有幫助的人在那裏。

副掃描

9

以下命令可以完成這項工作。

forfiles /M *.txt /C "cmd /c rename @file \"@fname 1.1.txt\"" 

來源:Rename file extensions in bulk

+0

+1我認爲這是最容易記住的,比cmd的'for'語法簡單得多,但令人失望的是它必須爲每次迭代產生一個新的cmd.exe進程。這使得糖蜜非常低效和緩慢。 –

1

我試圖粘貼Endoro的命令(感謝Endoro)直接進入命令提示符添加前綴到文件,但遇到錯誤。解決辦法是減少%%至%,所以:

for /f "delims=" %i in ('dir /b /a-d *.*') do ren "%~i" "Service.Enviro.%~ni%~xi" 
7

第1步:

選擇所有文件(Ctrl + A)

第2步:

然後選擇重命名選項

enter image description here

第3步:

選擇你的文件名...爲​​前:MYFILE

它會自動重命名爲MYFILE(01),MYFILE(02),, .....

如果您要更換空間&支架..繼續第4步

第4步:

打開Windows從當前文件夾Powershell的

enter image description here

第5步:

對於更換空的空間下劃線(_)

dir | rename-item -NewName {$_.name -replace [Regex]::Escape(" "),"_"} 

步驟6:

對於更換左括號

dir | rename-item -NewName {$_.name -replace [Regex]::Escape("("),""} 

對於更換右括號

dir | rename-item -NewName {$_.name -replace [Regex]::Escape(")"),""} 
+0

這個powershell很棒。謝謝 –

0

這適用於您的具體情況:

ren file?.txt "file? 1.1.txt"