如何解决ForeachPS中有多个重命名项 第一次尝试第二次尝试
我在一个文件夹中有多个文件,我正在尝试制作一个执行此操作的脚本:
我希望脚本逐个文件地完成
。注意:所有文件扩展名都不同。
第一次尝试
Get-ChildItem -Exclude "*.ps1",".txt" | rename-item -NewName { $_.Name + ".txt" }
Get-ChildItem "*.txt" | Rename-Item -NewName { $_.Basename.Replace('.','_') + $_.Extension }
Get-ChildItem "*.txt" -Filter *.txt |
Foreach-Object {
$content = Get-Content -Raw $_.FullName
if ($content -match '(?<=serie=")(.*)(?=" folioFiscal)') {
$Matches[1]
}
$string1 = $Matches[1]
if ($content -match '(?<=folioFiscal=")(.*)(?=" UUID)') {
$Matches[1]
}
$string2 = $Matches[1]
Rename-Item -Path $_.FullName -NewName ($string1+"-"+$string2+"_"+$_.Name)
}
它起作用了,但是问题是,如果文件夹中已经有“ .txt”文件,那也会对其产生影响,所以我试图逐个文件地执行相同的操作,而不考虑“ .txt”文件
第二次尝试
Get-ChildItem -Exclude "*.ps1","*.txt" |
Foreach-Object {
Rename-Item -Path $_.FullName -NewName ( $_.Name + ".txt" )
Rename-Item -Path $_.FullName -NewName ($_.Basename.Replace('.','_') + $_.Extension)
$content = Get-Content -Raw $_.FullName
if ($content -match '(?<=serie=")(.*)(?=" folioFiscal)') {
$Matches[1]
}
$string1 = $Matches[1]
if ($content -match '(?<=folioFiscal=")(.*)(?=" UUID)') {
$Matches[1]
}
$string2 = $Matches[1]
Rename-Item -Path $_.FullName -NewName ($string1+"-"+$string2+"_"+$_.Name)
}
我遇到$_.FullName
的问题,因为在第一个Rename-Item
之后,它没有变化,而下一个Rename-Item
在寻找旧文件(没有“ .txt” )或我的想法。
这是错误:
对此有什么解决办法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。