1

我在一个文件夹中有多个文件,我正在尝试制作一个执行此操作的脚本:

  1. 将文件扩展名更改为txt

  2. 将所有句点替换.为下划线_

  3. 获取文本文件中的内容并根据所获取的内容重命名

我希望脚本逐个文件执行。

注意:所有文件扩展名都不同。

第一次尝试

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”)或者这就是我的想法。

这是错误:

重命名项目:无法重命名,因为“路径”处的项目不存在。

有什么解决办法吗?

4

0 回答 0