PowerShell更改文件扩展名。

6

我有一个改变文件扩展名的问题。我需要编写一个脚本来复制数据,但数据有两个文件。文件名不是一个字符串,所以我们不能使用普通的-replace。

我需要从

filename.number.extension

这个表单

filename.number.otherextension

我们尝试使用分割命令,但是它显示的结果如下:
filename
number
otherextension

感谢任何想法,
5个回答

8
[System.IO.Path]::ChangeExtension("test.old",".new")

3
您可能需要使用类似于-replace运算符的内容:
'filename.number.extension' -replace 'extension$','otherextension'
  • $ 是正则表达式语法,表示行尾。这将确保 -replace 不会匹配文件名中其他位置出现的 "extension"。

2
这可以起作用:

Get-ChildItem 'C:\Users\Administrator\Downloads\text files\more text\*' *.txt | rename-item -newname { [io.path]::ChangeExtension($_.name, "doc") }

1
一个简单的实用函数。
<#
 # 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

这个脚本会将给定文件夹及其子文件夹中所有的 .sample.csv 文件重命名为 .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

您可以使用 [0..-1] 切片删除最后一个项目,并将新扩展名添加到其中。

(("filename.number.extension" -split "\.")[0..-1] -join '.') +".otherextension"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接