Как искать и заменять строку в нескольких xml-файлах (внутри каталога) с помощью Windows CMD
Может ли кто-нибудь помочь мне, предложив пакетный скрипт найти строку «utf-16» в нескольких xml-файлах в каталоге и заменить ее на «utf-8». Без использования инструментов поиска и замены. Замена должна выполняться в существующем файле.
- Как открыть Windows CMD, чтобы он запускался в текущей папке?
- Самый простой способ получить щелчок правой кнопкой мыши «Открыть командное окно здесь» с помощью admin priveleges в Windows 7
- Почему переменная среды не обновляется в cmd без перезапуска?
- Почему выгружать переменные в пакетные файлы Windows
- Можно ли использовать команду «start» с пробелами в пути?
- Укажите порядок сортировки в «copy / b * .dat foo» в Windows cmd
- Не удалось запустить командный файл
- Как я могу использовать Takeown, чтобы взять на себя все папки на одном диске?
Используйте любой XSLT-процессор. Например, msxsl.
Утилита преобразования командной строки
MSXML 4.0 с пакетом обновления 2 (основные службы Microsoft XML)
zero.xsl
– преобразование таблицы стилей test.xml
в test2.xml
<xsl:output method="xml" encoding="UTF-8" />
конвертировать xml в UTF-8.
Zeroxml test.xml
Zeroxml.cmd:
@echo off @set name=%1 msxsl.exe %name% zero.xsl -o %name:~0,-4%2.xml
zero.xsl:
<!-- The Identity Transformation --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <!-- <xsl:output method="html" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/> --> <xsl:output method="html" media-type="application/vnd.ms-excel" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/> <!-- <xsl:output omit-xml-declaration="no" indent="yes" encoding="UTF-8" method="html" /> --> <!-- <xsl:output method="xml" media-type="application/vnd.ms-excel" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/> --> <!-- <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/> --> <!-- <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/> --> <!-- Whenever you match any node or any attribute --> <xsl:template match="node()|@*"> <!-- Copy the current node --> <xsl:copy> <!-- Including any attributes it has and any child nodes --> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="*|@*|comment()| processing-instruction()|text()"> <xsl:copy> <xsl:apply-templates select="*|@*|comment()| processing-instruction()|text()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
Way2, конвертировать UTF-16 в командную строку UTF-8:
Unicode – порядок байтов младшего порядка UTF-16.
powershell gc test.xml -encoding Unicode^|sc testUTF8.xml -encoding UTF8
BigEndianUnicode – формат байтового байта формата UTF-16.
powershell gc test.xml -encoding BigEndianUnicode^|sc testUTF8.xml -encoding UTF8
Преобразование всех файлов xml UTF-16 в каталог SourceDirXML и подкаталог UTF-8
powershell $in='C:\SourceDirXML';$out='C:\OutputUTF8XML\';ls -Fo -r $in -Fi *.xml^|%{(gc $_.FullName -encoding Unicode^|sc ($out+$_.Name) -encoding UTF8)}
Найдите и замените строку в нескольких файлах xml (внутри каталога) с помощью Windows CMD:
powershell $in='C:\SourceDirXML';$out='C:\OutputUTF8XML\';ls -Fo -r $in -Fi *.xml^|%{(gc $_.FullName^|%{$_ -replace 'oldstring','newstring'}^|sc ($out+$_.Name) -encoding UTF8)}