如何使用 PowerShell 删除文件名中的前导或尾随空白 space?
How do I remove a leading or trailing blank space in file name with PowerShell?
我基本上是在尝试 trim() 任何名称末尾有前导或尾随 space 的文件名。这是我目前得到的代码
$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 在尝试将文件名转换为可以绑定到 -Path
的字符串时将 $_
解析为文件名。
显式传递文件的完整路径,它将起作用:
Rename-Item -Path $_.FullName -NewName $newname
或者,将 $_
文件对象通过管道传输到 Rename-Item
,PowerShell 将自动确定它需要将 $_.FullName
绑定到 Rename-Item
的 -LiteralPath
参数:
$_ |Rename-Item -NewName $newname
您还可以将整个循环变成单个管道,然后利用 pipeline-bound 表达式对 -NewName
:
$foldersToCheck |Get-ChildItem -Recurse |Rename-Item -NewName { $_.Name.Trim() }
如果现有的 Name
和 -NewName
值相同,Rename-Item
无论如何都会保留文件 :)
我基本上是在尝试 trim() 任何名称末尾有前导或尾随 space 的文件名。这是我目前得到的代码
$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 在尝试将文件名转换为可以绑定到 -Path
的字符串时将 $_
解析为文件名。
显式传递文件的完整路径,它将起作用:
Rename-Item -Path $_.FullName -NewName $newname
或者,将 $_
文件对象通过管道传输到 Rename-Item
,PowerShell 将自动确定它需要将 $_.FullName
绑定到 Rename-Item
的 -LiteralPath
参数:
$_ |Rename-Item -NewName $newname
您还可以将整个循环变成单个管道,然后利用 pipeline-bound 表达式对 -NewName
:
$foldersToCheck |Get-ChildItem -Recurse |Rename-Item -NewName { $_.Name.Trim() }
如果现有的 Name
和 -NewName
值相同,Rename-Item
无论如何都会保留文件 :)