我有一个改变文件扩展名的问题。我需要编写一个脚本来复制数据,但数据有两个文件。文件名不是一个字符串,所以我们不能使用普通的-replace。
我需要从
filename.number.extension
这个表单
filename.number.otherextension
我们尝试使用分割命令,但是它显示的结果如下:
filename
number
otherextension
感谢任何想法,
我有一个改变文件扩展名的问题。我需要编写一个脚本来复制数据,但数据有两个文件。文件名不是一个字符串,所以我们不能使用普通的-replace。
我需要从
filename.number.extension
这个表单
filename.number.otherextension
filename
number
otherextension
[System.IO.Path]::ChangeExtension("test.old",".new")
-replace
运算符的内容:'filename.number.extension' -replace 'extension$','otherextension'
$
是正则表达式语法,表示行尾。这将确保 -replace
不会匹配文件名中其他位置出现的 "extension"。Get-ChildItem 'C:\Users\Administrator\Downloads\text files\more text\*' *.txt | rename-item -newname { [io.path]::ChangeExtension($_.name, "doc") }
<#
# Renames all files under the given path (recursively) whose extension matches $OldExtension.
# Changes the extension to $NewExtension
#>
function ChangeFileExtensions([string] $Path, [string] $OldExtension, [string] $NewExtension) {
Get-ChildItem -Path $Path -Filter "*.$OldExtension" -Recurse | ForEach-Object {
$Destination = Join-Path -Path $_.Directory.FullName -ChildPath $_.Name.Replace($OldExtension, $NewExtension)
Move-Item -Path $_.FullName -Destination $Destination -Force
}
}
使用方法
ChangeFileExtensions -Path "c:\myfolder\mysubfolder" -OldExtension "extension" -NewExtension "otherextension"
example.sample.csv
example.txt
mysubfolder/
myfile.sample.csv
myfile.txt
# Replaces all .sample.csv files with .txt extensions in c:\myfolder and in c:\myfolder\mysubfolder
ChangeFileExtensions -Path "c:\myfolder" -OldExtension "sample.csv" -NewExtension "txt"
"*.$OldExtension" -Recurse | ForEach-Object
到
"*.$OldExtension" | ForEach-Object
您可以使用 [0..-1] 切片删除最后一个项目,并将新扩展名添加到其中。
(("filename.number.extension" -split "\.")[0..-1] -join '.') +".otherextension"