【问题标题】:Powershell Find Replace & BackupPowershell 查找替换和备份
【发布时间】:2014-09-12 22:30:44
【问题描述】:

现在,我正在寻求改进我的代码以使用更少的空间并更智能,我需要下面的代码来仅备份文件如果它被 Find & Replace 修改,现在我正在备份所有内容并覆盖旧的备份。

接下来我希望不要覆盖备份,而是给它们一个数字,因此如果“备份”文件夹中有 2 个相同的备份,它将如下所示:

文件备份.DCN3 -> 文件备份1.DCN3

所以我总是有原始文件。

get-childitem -path "C:\Users\Administrator\Desktop\Eurocard\SEB" -filter *.* -recurse | copy-item -destination "C:\Users\Administrator\Desktop\Eurocard\Backup" 

(Get-ChildItem "C:\Users\Administrator\Desktop\Eurocard\SEB\*.*" -recurse).FullName |
  Foreach-Object {
   (Get-Content $_ -Raw).
     Replace('*','Æ'). 
     Replace('"','Æ').
     Replace('#','Æ').
     Replace('¤','Æ').
     Replace('&','Æ').
     Replace('(','Æ').
     Replace(')','Æ').
     Replace('=','Æ').
     Replace('?','Æ').
     Replace('´','Æ').
     Replace('`','Æ').
     Replace('|','Æ').
     Replace('@','Æ').
     Replace('£','Æ').
     Replace('$','Æ').
     Replace('{','Æ').
     Replace('[','Æ').
     Replace(']','Æ').
     Replace('}','Æ').
     Replace('^','Æ').
     Replace('~','Æ').
     Replace('¨','Æ').
     Replace('*','Æ').
     Replace('<','Æ').
     Replace('>','Æ').
     Replace('\','Æ').
     Replace('_','Æ').
     Replace(';','Æ').
     Replace('.','Æ').
     Replace('!','Æ')|
   Set-Content $_
  }

有人可以帮忙吗?

【问题讨论】:

  • 您真的需要替换这些字符还是只是为了更容易识别文件?
  • 我需要替换它们,因为系统无法处理这些特殊字符...

标签: powershell replace find backup back


【解决方案1】:

好吧,要开始您的大部分正则表达式替换可能不起作用,您需要转义其中的大部分...例如“\”。无论如何,您可以将整个替换缩短为这样的一个表达式:

-replace '[*"#¤&()=?´`|@£${\[\]}^~¨*<>\\_;.!]','Æ'
#query to show it working
'*"#¤&()=?´`|@£${[]}^~¨*<>\_;.!' -replace '[*"#¤&()=?´`|@£${\[\]}^~¨*<>\\_;.!]','Æ'

在此基础上,如果您修改文件,您将如何将其仅备份:

(Get-ChildItem "C:\Users\Administrator\Desktop\Eurocard\SEB\*.*" -recurse).FullName |
Foreach-Object {
    $Content = (Get-Content $_ -Raw) 
    $Regex = '[*"#¤&()=?´`|@£${\[\]}^~¨*<>\\_;.!]'
    If ($Content | Select-String $Regex -Quiet)
    {
        $Content -Replace $Regex,'Æ'        
        <#
        rest of code block such as copies, backups, renames whatever would go here.
        This way it is only taking place if the file has an unwanted character and is
        modified
        #>        
    }
}

【讨论】:

  • 太棒了,非常感谢 :) 现在我只需要备份原始文件,然后用它来替换更改。
  • If 语句中的“-Quiet”是什么意思?
  • 不客气。 -Quiet 使它返回一个真/假值而不是内容。所以它只是说如果找到匹配 $true 否则 $false。
猜你喜欢
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
相关资源
最近更新 更多