2017-01-03 57 views
1

我需要用多個文件名替換多個字符串。這是我的數據看起來像什麼的代表。如何替換文件名中的多個字符串

CAL aB12 AUG.docx 
CAL cDe345 AUG.docx 
CAL FGHiJKL6789 AUG.docx

我需要將文件名中的「Calendar」和「AUG」替換爲「August」。

我已經能夠做的最好的是運行兩個cmdlet(每個替換一個)用分號鏈接在一起。這有效,但我知道這很粗糙。我們發現StackOverflow 3403217。由於缺乏知識和經驗,我無法將其提供的五個答案中的任何一個翻譯成單個cmdlet,這些cmdlet適用於我正在嘗試執行的操作。

p.s.我將感興趣的文件的副本粘貼到C:\ Temp中並從那裏開始工作。我正在使用Windows 7.

回答

-1
Get-Content List.txt | 

    Where-Object \\{ $_ -match '^\\\\' \\} | 

    ForEach-Object \\{ $_ -replace 

    '^\\\\(\S+).+','$1' \\} 

您基本上需要抓取文本文件並找到任何匹配的字符串,然後在for循環中運行以替換它。爲什麼在Powershell中?我不知道。

+1

爲什麼在Powershell中?我最初嘗試在命令提示符(cmd)會話中執行此操作,並按照下面所示的方式打開FILENAMES。在我的命令提示符會話中,我應該做些什麼不同? C:\ TEMP> DIR CAL AB123 AUG.doc CAL cde45 AUG.doc CAL fghijk6889 AUG.doc C:\ TEMP>仁 「CAL * Aug.doc」, 「日曆* August.doc」 C:\ TEMP> dir calendar3 August.doc calendar5 August.doc calendarjk6889 August.doc – pwt12855

+0

謝謝。我和Powershell一起去了,因爲我不想在命令提示符會話中完成我想要做的事情。使用:(ren「CAL * Aug.docx」「calendar * August.docx」會弄亂文件名。很多人向我建議了一個命令提示符會話,但是當他們給它一個鏡頭時,他們改變了他們的想法 – pwt12855

+0

有通配符星號在我提交之前的回覆中 – pwt12855

1

嘗試這樣的事情

$hashreplace = @{} 
$hashreplace.'old1' = 'new1' 
$hashreplace.'old2' = 'new2' 

Get-ChildItem -Recurse -File -Path "c:\temp\" | % { 
    $filename = $_.FullName 
    $text = $_.Name 
    $hashreplace.Keys | %{if ($text -ne $null) {$text = $text.Replace($_, $hashreplace[$_]) } } 
    Rename-Item -Path $filename -NewName $text 
} 
+0

謝謝Esperento57。我感謝您的幫助。雖然我確信你的解決方案是在錢上,但這遠遠超出了我目前的把握。下面顯示的是解決方案,我可以得到我的胳膊。 Get-Childitem |重命名,項目-NewName {($ _。命名 -replace「CAL」,「日曆」)-replace「月」,「八一」} – pwt12855

1

所有你需要做的是菊花鏈的替換操作:

gci | Rename-Item -NewName { $_.Name -replace "CAL","Calendar" -replace "AUG","August" } 

正如@ Esperento57在-replace運營商確實正則表達式替換的評論中提到。在你的情況下,它不會有所作爲,但如果你的搜索字符串中包含特殊字符,它們可能需要轉義,如:

gci | Rename-Item -NewName { $_.Name -replace [regex]::Escape("CAL"),"Calendar" -replace [regex]::Escape("AUG"),"August" } 

或者,您可以通過菊花鏈式Replace()方法調用做簡單的字符串替換:

gci | Rename-Item -NewName { $_.Name.Replace("CAL","Calendar").Replace("AUG","August") } 
+0

與此解決方案,要小心-replace使用正則表達式替換(您例如它的加工) – Esperento57

相關問題