Jak wyszukiwać i zamieniać ciąg w wielu plikach XML (w katalogu) za pomocą Windows CMD
-1
Czy ktoś może mi pomóc, sugerując skrypt wsadowy, aby znaleźć ciąg „utf-16” w wielu plikach xml w katalogu i zastąpić go „utf-8”. Bez użycia narzędzi Znajdź i zamień. Zastąpienie należy wykonać w samym istniejącym pliku.
@DavidPostill nie widziałeś słów utf-16 i utf-8 Pytanie może, ale nie musi, być nieco zagubione, ale nie rozwiązujesz tego, wskazując tylko to drugie pytanie
barlop
jeśli masz plik zawierający mieszankę utf-8 i niepotrzebnie utf-16, to czy plik ma pomieszany format pliku, czy na pewno masz taki plik?
barlop
@barlop Przeczytałem go jako zamień literał ciąg utf-16i zamień na utf-8. Jeśli OP chce zmienić kodowanie , nie sądzę, że jest to możliwe z cmd.
DavidPostill
1
@barlop OP poprosił o skrypt wsadowy (bez użycia narzędzi Znajdź i zamień). Nie zapytał, jak korzystać z zewnętrznych narzędzi do konwersji. AFAIK nie można tego zrobić za pomocą skryptu wsadowego bez użycia narzędzi zewnętrznych. W każdym razie nadal nie jest jasne, co OP próbuje zrobić. Proszę nie obrażaj mnie używając „pontyfikatu”, ponieważ pytanie jest niejasne ...
Myślę, że cały ten kod w zero.xsl ma sprawić, że zrobi to dla wielu plików? jaki kod zrobiłby to tylko dla jednego pliku? to dużo kodu, aby zmienić dosłowny ciąg znaków z jednej rzeczy na drugą. (jeśli tego właśnie chce)
barlop
@barlop zero.xsl pokazuje transformację, która nic nie robi z tekstem. Zrób to samo dla wielu plików, wystarczy zapętlić FOR /R %%i IN (*.xml) DO. Które linie chcesz zamienić w pliku xml i gdzie?
STTR
więc cały ten kod w zero.xsl to po prostu zamiana jednego ciągu na inny?
barlop
@barlop Nie, to pusta konwersja. Gdy plik jest konwertowany na sam, ale na przykład z kodowaniem UTF-8 określonym w opcjach. Jeśli podałeś w przykładzie dokładnie to, co chcesz przekonwertować, możesz napisać konkretną konwersję ciągu. Ponieważ będzie inaczej dla elementów i atrybutów dla pełnej linii dla podłańcucha.
STTR
dzięki, powinieneś wyjaśnić, że wszystko, co nic nie robi, i określasz konwersję, powinieneś nawet podać przykład konwertowania określonego ciągu. Wtedy będzie bardziej przydatny dla ludzi. Twoja odpowiedź powinna być przydatna dla osób szukających odpowiedzi na pytanie, innych niż PO. interesująca rzecz dotyczy również PowerShell, o której tam wspominasz. miejmy nadzieję, że OP sklaryfikuje to, co chce nawrócić. Ale w międzyczasie, a nawet niezależnie, podaj bardziej przydatny przykład (taki, który działa, z którego inni mogą korzystać i dostosowywać), aby twój przykład nie był całkowicie pustą powłoką.
utf-16
i zamień nautf-8
. Jeśli OP chce zmienić kodowanie , nie sądzę, że jest to możliwe z cmd.Odpowiedzi:
Użyj dowolnego procesora XSLT. Na przykład msxsl.
Narzędzie do transformacji wiersza poleceń
MSXML 4.0 z dodatkiem Service Pack 2 (Microsoft XML Core Services)
zero.xsl
- przekształcenie arkusza stylówtest.xml
natest2.xml
<xsl:output method="xml" encoding="UTF-8" />
przekonwertować xml na UTF-8.Zeroxml.cmd:
zero.xsl:
Way2, przekonwertuj UTF-16 na wiersz poleceń UTF-8:
Unicode - kolejność bajtów little-endian w formacie UTF-16.
BigEndianUnicode - kolejność bajtów big-endian w formacie UTF-16.
Konwertuj wszystkie pliki XML UTF-16 w katalogu SourceDirXML i podkatalogu na UTF-8
Wyszukaj i zamień ciąg znaków w wielu plikach xml (w katalogu) za pomocą Windows CMD:
źródło
FOR /R %%i IN (*.xml) DO
. Które linie chcesz zamienić w pliku xml i gdzie?