如何使用power shell从我的文件名中删除额外的空格?

时间:2015-07-12 20:39:40

标签: regex windows powershell directory filenames

我试图删除所有内容(在我运行此命令时,当我意外地在我的文件名中添加了大量空格时,在文件名中删除了

  

Dir | Rename-Item -NewName {$ _。Name -replace“()”,“”}

在电源外壳中。我想它与没有明确表示“()”字符不是某个表达式的一部分并且我没有意识到它有关。我有一大堆文件,例子名称为

  

H o w T o C r a f t()[。zip

  

V e d e o G a m e()[.zip

每个字母之间有一个空格,每个字之间有两个空格 我现在需要转换成

  

如何Craft.zip

     

Video Game.zip

我一般都是使用正则表达式和power shell的新手。如果有人可以帮我使用命令来删除单词之间的双倍间距,字母和任何字符实例之间的单个间距(以及所有文本后面的字符)(它将解决我的所有问题。

2 个答案:

答案 0 :(得分: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"
}

答案 1 :(得分:0)

您可以使用以下正则表达式替换来恢复文件名:

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

或者

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

替换为:$1

请参阅demo 1demo 2

所以,它现在看起来像

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