Powershell 一次更改批量文件扩展名

Powershell Changing Bulk File Extensions All At Once

长话短说:需要更改多个文件扩展名为 . (在 Windows 中,文件扩展名只是一个 .)到 .csv。我可以在命令提示符下执行此操作:

ren *. *.csv

但是当我尝试在 Powershell 中重命名时,它只更改了第一个文件(结果:.csv.csv.csv.csv.csv.csv.csv)而其余文件保持不变。我使用了这个命令:

Dir | Rename-Item -NewName { $_.name -replace ".",".csv" }

谁能解释一下我做错了什么,为什么第一个文件被重命名为这样?不明白为什么 Powershell 使它变得更复杂,因为它基于 CMD。

-replace 使用正则表达式匹配,其中 . 将匹配任何字符,因此每个字符都被替换为 .csv。尝试用 *.csv

替换 *.txt*.file
gci -File | Rename-Item -NewName { $_.name -replace "\.(txt|file)$", ".csv" }

问题变了。如果您的文件确实以 . 结尾,而我实际上无法重现,那么 -replace "\.$", ".csv" 其中 \. 匹配文字点,而 $ 匹配行尾。

如果您的文件根本没有扩展名,那么您可以 -replace "$", ".csv"

或者您可以过滤没有扩展名的文件,然后只添加一个

gci -File |? Extension -eq ''  |% { Rename-Item $_.FullName -NewName "$($_).csv" }
Get-ChildItem -Path C:\ -File | ForEach {Rename-Item $_.FullName -NewName ($_.name).Replace(".txt",".csv")}

使用点符号,它读取字符;意味着不需要转义任何特殊字符。