我对文件的更改扩展名有疑问。我需要编写一个脚本来复制数据,但是数据有两个文件。文件名不是字符串,所以我们不能使用普通的-replace
我需要从
获取filename.number.extension
此表单
filename.number.otherextension
我们尝试使用拆分,但是此命令向我们显示如下内容
filename
number
otherextension
感谢任何想法,
答案 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")