我在一个文件夹中有多个文件,我正在尝试制作一个执行此操作的脚本:
将文件扩展名更改为txt
将所有句点替换
.
为下划线_
获取文本文件中的内容并根据所获取的内容重命名
我希望脚本逐个文件执行。
注意:所有文件扩展名都不同。
第一次尝试
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”)或者这就是我的想法。
这是错误:
重命名项目:无法重命名,因为“路径”处的项目不存在。
有什么解决办法吗?