powershell замества специални знаци

Съвсем нов съм в powershell, но се опитвам да заменя определени знаци в рамките на .xml файлове. Явно вече се спъвам с първите стъпки.

напр. Ще се опитам да заменя:

<?xml version="1.0"?>

с

<?xml version="2.0"?>

По-долу ще намерите кода, който написах досега:

Get-Childitem "C:\Users\jp\Desktop\Test" | ForEach-Object {

        $Content = Get-Content $_.fullname
        $Content = ForEach-Object { $Content -replace "(<?xml version=`"1.0`"?>)","(<?xml version=`"2.0`"?>)" }

        Set-Content $_.fullname $Content -Force

        }

Проблемът е, че това е само началото на низовете, които трябва да заменя. Има ли начин да замените текст в определен диапазон, независимо от знаците вътре?

Чудя се как да заменя цял низ, без значение какви специални символи имам вътре. Благодаря предварително.


person Mike Myers    schedule 10.08.2012    source източник


Отговори (2)


Използвайте метода Escape, за да екранирате специални символи по време на изпълнение. Не е необходимо да избягвате шаблона за замяна:

(Get-Content c:\dump\xml) | 
ForEach-Object {$_ -replace [regex]::Escape('<?xml version="1.0"?>'),'<?xml version="2.0"?>'} | 
Set-Content c:\dump\xml
person Shay Levy    schedule 11.08.2012
comment
Това е страхотно, затова харесвам това място, хората помагат и учат в същото време. - person justinf; 11.08.2012

Здравейте, има много начини за съвпадение на регулярни изрази, можете просто да промените кода си с този по-долу.

\ просто избягва специалните чартъри на регулярен израз, така че частта за съвпадение работи.

Get-Childitem "c:\dump\xml" | ForEach-Object {

        $Content = Get-Content $_.fullname
        $Content = ForEach-Object { $Content -replace '(<\?xml version="1\.0"\?>)','<?xml version="2.0"?>' }

        Set-Content $_.fullname $Content -Force

        }
person justinf    schedule 10.08.2012