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")}
使用点符号,它读取字符;意味着不需要转义任何特殊字符。
长话短说:需要更改多个文件扩展名为 . (在 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")}
使用点符号,它读取字符;意味着不需要转义任何特殊字符。