【问题标题】:Rename multiple files with string from .txt file using PowerShell使用 PowerShell 重命名 .txt 文件中带有字符串的多个文件
【发布时间】:2019-04-24 16:34:34
【问题描述】:

我目前正在开发一个需要 .xml 文件的程序,将其读入 Oracle 数据库,然后导出一个新的 .xml 文件。但问题是新文件必须与原始文件具有完全相同的名称。

我将原始文件名保存到 .txt 文件中,现在我尝试在行内搜索关键字,以在 .txt 文件中使用正确的名称重命名正确的文件。举个例子:

我的 4 个文件(从数据库中导出):

 PM.Data_information.xml
 PM.Data_location.xml
 PM.Cover_quality.xml
 PM.Cover_adress.xml

Namefile.txt 的内容(原始名称):

 PM.Data_information_provide_SE-R-SO_V0220_657400509_3_210.xml
 PM.Data_location_provide_SE-R-SO_V0220_9191200509_3_209.xml
 PM.Cover_quality_provide_SE-R-SO_V0220_354123509_3_211.xml
 PM.Cover_adress_provide_SE-R-SO_V0220_521400509_3_212.xml

我只是想出了如何通过选择行号来获取一行:

$content = Get-Content C:\Namefile.txt
$informationanme = $content[0]
Rename-Item PM.Data_information.xml -NewName $informationname

有没有办法通过在字符串中搜索关键字来选择该行?

【问题讨论】:

    标签: string powershell


    【解决方案1】:
    $content = Get-Content C:\temp\ps\NewFile.txt
    $files = Get-ChildItem c:\temp\ps\ 
    
    $content | 
        %{
            $currentLine = $_
            $file = $files | Where-Object { $currentLine.StartsWith($_.Name.Replace(".xml", "")) } 
    
            Rename-Item $file.Name $currentLine
    
        }
    

    这段代码应该可以解决问题。请注意,您需要将所有需要重命名的文件放在一个文件夹中。将文件夹路径设置为$files 变量(当前设置为c:\temp\ps)。将NewFile.txt所在的路径设置为$content路径。

    代码通过循环NewFile.txt 中的每一行并查找名称与行首匹配的任何文件来工作(如果有任何文件不遵循此模式,您显然需要更新代码,但希望能给你一个好的起点)。

    【讨论】:

      【解决方案2】:

      其他解决方案;)

        gci -Path "c:\temp" -File -Filter "*.xml" | % { rni $_.fullname (sls "C:\temp\Namefile.txt" -Pattern ([System.IO.Path]::GetFileNameWithoutExtension($_.fullname))).Line }
      

      【讨论】:

        猜你喜欢
        • 2014-02-13
        • 1970-01-01
        • 2016-09-26
        • 2023-03-28
        • 1970-01-01
        • 2020-10-13
        • 2017-10-11
        • 1970-01-01
        • 2017-11-13
        相关资源
        最近更新 更多