使用PowerShell使用.txt文件中的字符串重命名多个文件

时间:2016-10-21 07:56:27

标签: string powershell

我目前正在开发一个需要.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

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

2 个答案:

答案 0 :(得分: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中的每一行并查找名称与行开头匹配的任何文件(如果有任何文件不遵循此模式,您显然需要更新代码,但希望给你一个很好的起点)。

答案 1 :(得分:0)

其他解决方案;)

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