如何使用PowerShell删除文件名中的前导或尾随空格?

如何使用PowerShell删除文件名中的前导或尾随空格?,powershell,trim,Powershell,Trim,我基本上是尝试修剪()任何在名称末尾有前导或尾随空格的文件名。这是我目前掌握的密码 $foldersToCheck = "$env:userprofile\documents", "$env:userprofile\pictures", "$env:userprofile\desktop" foreach ($folder in $foldersToCheck) { get-childitem -path $folder -re

我基本上是尝试修剪()任何在名称末尾有前导或尾随空格的文件名。这是我目前掌握的密码

$foldersToCheck = "$env:userprofile\documents", "$env:userprofile\pictures", "$env:userprofile\desktop"
foreach ($folder in $foldersToCheck) {
    get-childitem -path $folder -recurse | foreach-object {
        if ($_.name.startswith(" ") -or $_.name.endswith(" ")) {
            $newName = $_.name.trim()
            rename-item -path $_ -newName $newname
        }
    }
}
如果我创建了一个测试文件(c:\users\someusername\desktop\test.txt),那么我会收到这个错误

rename-item : Cannot rename because item at ' test.txt' does not exist.
    At line:6 char:13
    +             rename-item -path $_ -newName $newname
    +             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
        + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand

因此,它似乎找到了需要重命名的文件,但随后说它不存在。

这里的问题是,PowerShell在尝试将文件名转换为可以绑定到的字符串时,仅将文件名解析为
$\ucode>

显式传递文件的完整路径,它将工作:

Rename-Item -Path $_.FullName -NewName $newname
或者,通过管道将
$\u
文件对象连接到
重命名项
,PowerShell将自动确定需要将
$\u.FullName
绑定到
重命名项
-LiteralPath
参数:

$_ |Rename-Item -NewName $newname

您还可以将整个循环转换为单个管道,然后利用管道绑定表达式来处理
-NewName

$foldersToCheck |Get-ChildItem -Recurse |Rename-Item -NewName { $_.Name.Trim() }

如果现有的
名称
-NewName
值相同,
重命名项
无论如何只会保留文件:)

工作起来很有魅力。谢谢大家!@神秘松饼太好了,不客气!如果有帮助,我还添加了一个管道示例:)