2015-07-12 89 views
3

我試圖刪除後一切(在文件名時,我不小心加了很多空白的我的文件名時,我跑這個命令如何使用Power Shell從我的文件名中刪除多餘的空格?

導演|重命名,項目-NewName {$ _名稱()「}()」,「」}

在power shell中,我想這與「()」字符不是某個表達式的一部分並且我沒有意識到我有一大堆文件,例如

ħ流Ť攝氏度筏()[的.zip

視頻ģAME()[的.zip

具有每個字母和兩個空間之間的空間每個字 那我現在需要轉換成

如何Craft.zip

之間

視頻Game.zip

,我對一般使用正則表達式和電源外殼相當新手。如果有人可以幫助我使用一個命令來刪除單詞之間的雙倍間距,字母和任何字符之間的單個間距(以及後面的所有文本(它可以解決我所有的問題)。

回答

0

您可以使用以下的正則表達式替換:

(?!)|[()\[\]]+ [()\[\]]+(?=\.)|() 

或者

\s(?!\s)|[()\[\]]+\s+[()\[\]]+(?=\.)|(\s) 

和更換是:$1

demo 1demo 2

所以,現在看起來像

Dir | Rename-Item -NewName { $_.Name -replace "\s(?!\s)|[()\[\]]+\s+[()\[\]]+(?=\.)|(\s)","$1"} 
+0

從我的文件中刪除了所有空格,並且沒有刪除()[****。下一步將是在任何大寫字母之前添加一個空格。 – Xenos

+0

那麼,你可以在每個大寫字母之前插入一個空格(用'(?<=\p{Lu})' =>和'space'作爲替換)。 –

1

可以使用\s正則表達式空格字符類來代替空間,Trim()在結束與this brilliant regex pattern每個單詞後去除特殊字符和引進空間:

$Files = Get-ChildItem .\ -Name 

$CamelCasePattern = '([A-Z])([A-Z])([a-z])|([a-z])([A-Z])' 
$CamelCaseReplace = '$1$4 $2$3$5' 

foreach($FileName in $Files){ 
    # Get the files base name 
    $basename = [System.IO.Path]::GetFileNameWithoutExtension($FileName) 

    # Remember the extension 
    $extension = $FileName.Substring($basename.Length) 

    # Remove all whitespace 
    $basename = $basename -ireplace '\s','' 
    # Remove excess characters at the end 
    $basename = $basename.TrimEnd('()[') 
    # introduce space after each capitalized word 
    $basename = $basename -creplace $CamelCasePattern,$CamelCaseReplace 

    # return correct file name 
    "$basename$extension" 
} 
相關問題