Как мне заменить специальные символы в файле XML с помощью PowerShell

#powershell

#powershell

Вопрос:

Мне нужно заменить все < , > и " в файле. Я использую следующее, но это не удается.

 powershell.exe -Command (Get-Content C:Usersdearo05Documentsfoundersannual_dividend_cov.xml) |
    ForEach-Object {
        $_ -replace '<', 'amp;#60;' `
           -replace '>', 'amp;#62;' `
           -replace '"', 'amp;#62;'
} | Set-Content c:Usersdearo05Documentsfoundersannual_dividend_cov.xml
  

Комментарии:

1. Привет, добро пожаловать в StackOverflow. Пара комментариев по вашему вопросу. Ваш код не очень хорошо отформатирован, что затрудняет его чтение. Вы, как правило, получаете больше помощи, когда ваши вопросы легче читать другим. Просто сказать «это сбой» бесполезно. Объяснение конкретной ошибки заключается в следующем. В случаях, когда вы хотите преобразовать что-либо (например, текст), многие люди находят полезным, когда вы предоставляете пример ввода и пример ожидаемого результата.

2. «сбой» не является допустимым описанием проблемы. Какого результата вы ожидаете? Какой результат вы на самом деле получаете? Есть ли ошибки? Что они говорят?

3. Кроме того, почему вы пытаетесь заменить угловые скобки и двойные кавычки в файле XML в первую очередь? Пожалуйста, сделайте шаг назад и опишите реальную проблему, которую вы пытаетесь решить, вместо того, что вы воспринимаете как решение. Для чего вам это нужно? Что вы хотите сделать с измененным файлом?

Ответ №1:

Это просто проблема с цитированием при попытке передать значение в -Command .

Если это вызывается из консоли PowerShell, будет работать следующее.

 Powershell.exe -Command "(Get-Content C:Usersdearo05Documentsfoundersannual_dividend_cov.xml) -replace '<','amp;#60;' -replace '>','amp;#62;' -replace '`"', 'amp;#62;' | Set-Content c:Usersdearo05Documentsfoundersannual_dividend_cov.xml"
  

Если это вызывается из CMD, будет работать следующее:

 Powershell.exe -Command "(Get-Content C:Usersdearo05Documentsfoundersannual_dividend_cov.xml) -replace '<','amp;#60;' -replace '>','amp;#62;' -replace '""', 'amp;#62;' | Set-Content c:Usersdearo05Documentsfoundersannual_dividend_cov.xml"
  

Значение, передаваемое в -Command , должно быть заключено в двойные кавычки. Самый простой способ сделать это — превратить все двойные кавычки внутри значения в одинарные кавычки, где это возможно, а затем экранировать двойные кавычки внутри значения. Если вызывается из сеанса PowerShell, вам нужно отменить внутренние двойные кавычки (`»). Если вызывается изнутри CMD.exe вам нужно заключить кавычки в двойные кавычки («»).

Комментарии:

1. Системе, в которую я это читаю, не нравятся специальные символы, поэтому я подумал, что их замена и это преобразует их для меня. Спасибо, что сработало