2013-05-19 46 views

回答

69

使用PowerShell在DOS提示符下執行任何更智能的操作。在這裏,我已經展示瞭如何批量重命名所有在當前目錄下,通過與_下劃線代替它們包含空格的文件和目錄。

Dir | 
Rename-Item -NewName { $_.Name -replace " ","_" } 

編輯:
任選地,Where-Object命令可以用來濾波器出不合格的對象的連續小命令(命令讓)。以下是一些例子來說明的靈活性,它可以承受你:

  • 要跳過任何文檔文件

    Dir | 
    Where-Object { $_.Name -notmatch "\.(doc|xls|ppt)x?$" } | 
    Rename-Item -NewName { $_.Name -replace " ","_" } 
    
  • 僅處理目錄(預3.0版本)

    Dir | 
    Where-Object { $_.Mode -match "^d" } | 
    Rename-Item -NewName { $_.Name -replace " ","_" } 
    

    的PowerShell 3.0引入了新的Dir標誌。您也可以在那裏使用Dir -Directory

  • 要跳過已經含有下劃線(或一些其它字符)的任何文件

    Dir | 
    Where-Object { -not $_.Name.Contains("_") } | 
    Rename-Item -NewName { $_.Name -replace " ","_" } 
    
+0

什麼是'在哪裏,Object'的使用。 [aphoe answer](http://stackoverflow.com/a/23555996/1275574)沒有'Where-Object'做同樣的事情 – AminM

+1

@JesonPark謝謝你指出這一點。我已經在'Where-Object'用法上添加了一些更好的例子。 –

+3

重命名項目:源和目標路徑必須不同。錯誤:/ –

-2

我會建議rename命令這一點。在命令行鍵入ren /?以獲得更多幫助。

6

此批處理文件可以幫助,但它有一定的侷限性。文件名characters =和%不能被替換(從內存中取出),文件名中的^也可能是一個問題。

在關於在下部塊的每一行該部分%newname: =_%它與字符:後替換字符=後所以,因爲它代表的字符的一串要用下劃線來代替。

取出echo激活ren命令,因爲它只會打印命令控制檯窗口,直到你怎麼做。

它只會處理當前文件夾,除非您將/s添加到DIR命令部分,然後它將處理當前文件夾下的所有文件夾。

要刪除一個特定的字符,從後=符號刪除字符。在%newname:z=%這樣的條目將刪除所有z字符(不區分大小寫)。

@echo off 
for /f "delims=" %%a in ('dir /a:-d /o:n /b') do call :next "%%a" 
pause 
GOTO:EOF 
:next 
set "newname=%~nx1" 

set "newname=%newname: =_%" 
set "newname=%newname:)=_%" 
set "newname=%newname:(=_%" 
set "newname=%newname:&=_%" 
set "newname=%newname:^=_%" 
set "newname=%newname:$=_%" 
set "newname=%newname:#=_%" 
set "newname=%newname:@=_%" 
set "newname=%newname:!=_%" 
set "newname=%newname:-=_%" 
set "newname=%newname:+=_%" 
set "newname=%newname:}=_%" 
set "newname=%newname:{=_%" 
set "newname=%newname:]=_%" 
set "newname=%newname:[=_%" 
set "newname=%newname:;=_%" 
set "newname=%newname:'=_%" 
set "newname=%newname:`=_%" 
set "newname=%newname:,=_%" 

echo ren %1 "%newname% 
26

一個班輪命令Windows PowerShell中刪除或重命名的某些字符將是如下。(這裏的空白被用下劃線代替)

Dir | Rename-Item –NewName { $_.name –replace " ","_" } 
+0

能夠快速重命名文件夾中的一堆文件,謝謝! – abjbhat

+0

很高興得到了幫助。 – aphoe

+2

重命名項目:源和目標路徑必須不同。錯誤:/ –

6

PowerShell的回答都不錯,但重命名-Item命令不會在同一目標目錄工作,除非所有的文件都在他們不想要的字符(如果發現重複則失敗)。

如果你和我一樣,有好名壞名的組合,試試這個腳本,而不是(將取代以下劃線空格):

Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace(" ", "_") } 
+0

這個解決方案適用於我(因爲接受的答案會拋出錯誤,我認爲是由於一些文件不包含要替換的字符,正如你所提到的)。 +1,在這種情況下,我會很高興詳細解釋一下'-Recurse'標誌和'Move-Item'命令。 – j4v1

相關問題