首页 文章

替换PS中所有directiories和文件的名称

提问于
浏览
5

我想在所有子文件夹和文件的名称中将所有空格字符替换为“_” . 不幸的是,当我输入:

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

错误信息:

重命名项:源和目标路径必须不同 . 在行:1 char:60 Get-ChildItem -recurse -name | ForEach-Object {Rename-Item <<<< $ _ $ .replace(“”,“”)} CategoryInfo:WriteError:(PATH_HERE)[Rename-Item],IOException FullyQualifiedErrorId:RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand

我该如何改进这个短代码?

2 回答

  • 4

    不要使用Name开关,它只输出对象的名称,而不是它们的完整路径 . 试试这个:

    Get-ChildItem -Recurse | `
       Where-Object {$_.Name -match ' '} | `
         Rename-Item -NewName { $_.Name -replace ' ','_' }
    
  • 7

    这里的问题是,如果文件名中没有空格,则名称不会更改 . Rename-Item 不支持此功能 . 您应该使用 Move-Item 代替:

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

    另外,在你的回答中你错过了 $_.replace(...) 中的下划线以及用空字符串替换空格的地方 . 在我的回答中包括这个 .

相关问题