2016-10-21 69 views
0

當前正在處理需要.xml文件的程序,將其讀入Oracle數據庫,然後導出新的.xml文件。但問題是新文件必須與原始文件具有完全相同的名稱。使用PowerShell重命名帶有.txt文件的字符串的多個文件

我將原始文件名保存到.txt文件中,現在我正在嘗試在行內搜索關鍵字,以便在.txt文件中用正確的名稱重命名正確的文件。下面一個例子:

我的4個文件(從數據庫導出):Namefile.txt的

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

內容(原來的名稱):

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 

是否有方法通過搜索關鍵字來選擇該行在字符串裏面?

回答

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中的每一行中循環,並找到名稱與行起始位置相匹配的任何文件(如果有任何文件不遵循此模式,您顯然需要更新代碼,但希望給你一個很好的起點)。

0

其他溶液)

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