Powershell更改扩展

时间:2018-09-06 19:11:58

标签: powershell replace split

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

我需要从

获取
filename.number.extension

此表单

filename.number.otherextension

我们尝试使用拆分,但是此命令向我们显示如下内容

filename
number
otherextension

感谢任何想法,

5 个答案:

答案 0 :(得分:0)

您可能想要类似-replace运算符的内容:

'filename.number.extension' -replace 'extension$','otherextension'
  • $是正则表达式语法,表示行尾。这应该确保-replace与文件名中其他位置出现的“扩展名”不匹配。

答案 1 :(得分:0)

您可以删除带有[0 ..- 1]切片的最后一项,然后向其添加新的扩展名

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

答案 2 :(得分:0)

简单的实用程序功能

<#
 # 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

答案 3 :(得分:0)

这可能有效:

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

答案 4 :(得分:0)

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