使用PowerShell删除文件扩展名

问题描述 投票:0回答:1

我正在尝试清理 Windows 中的一些文件夹,这些文件夹包含数十个带有双 .txt 扩展名的文本文件。 (file1.txt.txt) 我认为下面的 PowerShell 脚本可以工作,但它给了我错误。

Get-ChildItem -Filter *.txt -Recurse -File -Name | ForEach-Object {Rename-Item $_.BaseName}

Rename-Item:无法将参数绑定到参数“Path”,因为它为空。 在行:1 字符:80

  • ... *.txt -Recurse -文件-名称 | ForEach-Object {重命名项目 $_.BaseName}

根据错误提示 Path 为空,我在命令中添加了“-Path .\ ”,但它返回了相同的错误消息。

我看过以下帖子,但显示的建议对我不起作用。 在 PowerShell 中从文件名中删除路径和扩展名

Get-ChildItem -Filter *.txt -Recurse -File -Name | ForEach-Object {Rename-Item $_.BaseName}

Rename-Item:无法将参数绑定到参数“Path”,因为它为空。 在行:1 字符:80

  • ... *.txt -Recurse -文件-名称 | ForEach-Object {重命名项目 $_.BaseName}

根据错误提示 Path 为空,我在命令中添加了“-Path .\ ”,但它返回了相同的错误消息。

powershell
1个回答
0
投票

错误是因为

-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 }
© www.soinside.com 2019 - 2024. All rights reserved.