2014-09-12 2 views
0

Прямо сейчас, я ищу, чтобы улучшить свой код, чтобы использовать меньше места и быть более умным, мне нужен нижеприведенный код только для резервного копирования файлов, если он изменен в Find & Замените, прямо сейчас я делая резервную копию всего и перезаписывая старые резервные копии.Powershell Find Replace & Backup

Следующая вещь, которую я хотел бы, чтобы не перезаписывать резервные копии, но вместо того, чтобы дать им номер, так что, если есть 2 одинаковых резервных копий в «резервной копии» папки она будет выглядеть следующим образом:

Filebackup.DCN3 -> Filebackup1.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 $_ 
    } 

Есть ли кто-нибудь, кто может с этим помочь?

+0

Есть ли у вас на самом деле есть заменить эти символы или просто сделать это, чтобы упростить идентификационные файлы? –

+0

Мне НЕОБХОДИМО заменить их, так как система не может обрабатывать эти специальные символы ... –

ответ

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 
     #>   
    } 
} 
+0

Awesome Спасибо alot :) Теперь мне просто нужно сделать резервную копию исходного файла и заставить его заменить изменения. –

+0

Что такое «-Quiet» для оператора If? –

+0

Тебе тихо. -Quiet заставляет его возвращать значение true/false, а не контент. Таким образом, это просто говорит, что если найдено совпадение $ true, иначе $ false. –