我正在尝试清理 Windows 中的一些文件夹,这些文件夹包含数十个带有双 .txt 扩展名的文本文件。 (file1.txt.txt) 我认为下面的 PowerShell 脚本可以工作,但它给了我错误。
Get-ChildItem -Filter *.txt -Recurse -File -Name | ForEach-Object {Rename-Item $_.BaseName}
Rename-Item:无法将参数绑定到参数“Path”,因为它为空。 在行:1 字符:80
根据错误提示 Path 为空,我在命令中添加了“-Path .\ ”,但它返回了相同的错误消息。
我看过以下帖子,但显示的建议对我不起作用。 在 PowerShell 中从文件名中删除路径和扩展名
Get-ChildItem -Filter *.txt -Recurse -File -Name | ForEach-Object {Rename-Item $_.BaseName}
Rename-Item:无法将参数绑定到参数“Path”,因为它为空。 在行:1 字符:80
根据错误提示 Path 为空,我在命令中添加了“-Path .\ ”,但它返回了相同的错误消息。
错误是因为
-Name
使 Get-ChildItem
输出字符串,而字符串没有 .BaseName
属性,因此当您执行 $_.BaseName
时,它默认为 null
并且您会收到该错误。
除此之外,考虑到您不想只输出文件的名称,您仍然会缺少
Rename-Item
(-NewName
)的参数。
您最可能想做的是:
Get-ChildItem -Filter *.txt -Recurse -File | ForEach-Object { Rename-Item $_.FullName -NewName $_.BaseName }
但是,有一个更简化的版本,使用 delay-bind 脚本块:
Get-ChildItem -Filter *.txt -Recurse -File | Rename-Item -NewName { $_.BaseName }