Windows CMD ile birden fazla xml dosyasında (bir dizinde) bir dize arama ve değiştirme


-1

Herhangi biri, bir dizindeki birden fazla xml dosyasında 'utf-16' dizesini bulmak için bir toplu komut dosyası önererek bana yardımcı olabilir ve 'utf-8' ile değiştirir. Bul ve değiştir araçlarını kullanmak dışında. Değiştirme, mevcut dosyanın kendisinde yapılmalıdır.



@DavidPostill, utf-16 ve utf-8 kelimelerini görmediniz mi? Soru biraz kafanız karışmış olabilir veya olmayabilir, ancak sadece bu diğer soruyu işaret ederek
değinmiyorsunuz

utf-8 ve gereksiz yere utf-16'nın karışımına sahip bir dosyanız varsa, o zaman dosyanız karma bir dosya formatıdır, böyle bir dosyanız olduğuna emin misiniz?
barlop

@ barlop Ben değişmez dizgiyi utf-16değiştirdim ve ile değiştirdim utf-8. OP kodlamayı değiştirmek isterse, bunun cmd'den mümkün olduğunu sanmıyorum.
DavidPostill

1
@ barlop OP bir toplu komut dosyası istedi (Bul ve değiştir araçlarını kullanmadan). Dönüşüm yapmak için dış araçları nasıl kullanacağını sormadı. AFAIK, harici araçlar kullanmadan sadece bir toplu komut dosyası ile yapılamaz. Her durumda OP'nin ne yapmaya çalıştığı hala belli değil. Lütfen soruyu
netleştirmeden

Yanıtlar:


1

Herhangi bir XSLT işlemci kullanın. Örneğin, msxsl.

Komut Satırı Dönüşüm Yardımcı Programı

MSXML 4.0 Service Pack 2 (Microsoft XML Çekirdek Hizmetleri)

zero.xsl- stil sayfasına dönüştürmek test.xmliçintest2.xml

<xsl:output method="xml" encoding="UTF-8" /> xml'yi UTF-8'e dönüştürün.

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'yı UTF-8 komut satırına dönüştür:

Unicode - UTF-16 formatı küçük endian bayt sırası.

powershell gc test.xml -encoding Unicode^|sc testUTF8.xml -encoding UTF8

BigEndianUnicode - UTF-16 biçiminde büyük endian bayt sırası.

powershell gc test.xml -encoding BigEndianUnicode^|sc testUTF8.xml -encoding UTF8

SourceDirXML dizinindeki ve alt dizindeki UTF-16 dosyalarının tümünü UTF-8'e dönüştürün

powershell $in='C:\SourceDirXML';$out='C:\OutputUTF8XML\';ls -Fo -r $in -Fi *.xml^|%{(gc $_.FullName -encoding Unicode^|sc ($out+$_.Name) -encoding UTF8)}

Windows CMD ile birden çok xml dosyasında (bir dizinde) bir dize arayın ve değiştirin:

powershell $in='C:\SourceDirXML';$out='C:\OutputUTF8XML\';ls -Fo -r $in -Fi *.xml^|%{(gc $_.FullName^|%{$_ -replace 'oldstring','newstring'}^|sc ($out+$_.Name) -encoding UTF8)}

Sanırım bütün bu kod, zero.xsl içindeki birçok dosya için bunu yapmaktır. hangi kod sadece bir dosya için yapar? değişmez dizgiyi bir şeyden diğerine değiştirmek için çok fazla kod var. (yapmak istediği
buysa

@ barlop zero.xsl, metinle hiçbir şey yapmayan dönüşümü gösterir. Birden fazla dosya için de aynısını yapın, sadece döngü yapmanız gerekir FOR /R %%i IN (*.xml) DO. Xml dosyasında hangi satırları değiştirmek istiyorsunuz ve nerede?
STTR

öyleyse, zero.xsl içindeki bütün bu kod sadece bir dizgiyi başka bir dizgiyle değiştirmek içindir?
barlop

@ barlop Hayır, boş bir dönüşüm. Dosya kendisine dönüştürüldüğünde ancak örneğin seçeneklerde belirtilen UTF-8 kodlamasıyla. Örnekte tam olarak ne dönüştürmek istediğinizi belirttiyseniz, belirli bir dize dönüşümü yazabilirsiniz. Çünkü, alt dize ait tüm satır için elemanlar ve özellikler için farklı olacaktır.
STTR

teşekkürler, hiçbir şeyin yapamayacağını netleştirmeli ve dönüşümü belirtmelisiniz, hatta belirli bir dize dönüştürmek için bir örnek bile belirtmelisiniz. O zaman insanlar için daha faydalı olacak. Yor cevabı, OP dışında, sorunun cevabını arayan insanlar için yararlı olmalıdır. İlginç bir şey de powershell orada da söz. umarım OP neyi dönüştürmek istediğini belirsizleştirir. Ancak bu arada, hatta ne olursa olsun, örneğinizin tamamen boş bir kabuk olmaması için (işe yarayan, başkalarının kullanabileceği ve uyarlayabileceği) daha faydalı bir örnek verin.
barlop
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.