2017-01-03 28 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

相关问题