2016-11-04 6 views
0

Ich verwende xmlstarlet, um eine XML-Datei zu bearbeiten. Ich habe speziell Probleme mit diesen beiden Befehlen.Probleme beim Entkommen von Sonderzeichen in der Batch-Datei

xml ed -P --update /ns2:ExportManifest/ExportManifestEntity[@path='home/user_name/11.05 CFD Developer commits.xanalyzer']/ExportManifestProperty/EntityMetaData/@name -v 11.05 CFD Developer commits.xanalyzer someFile.xml > someFileNew.xml & move /Y someFileNew.xml someFile.xml 

Dieser Befehl tut nicht, was er soll. Nachdem ich den obigen Code ausgeführt habe, finde ich die Datei leer. Muss ich etwas entkommen, damit dieser Befehl funktioniert?

Zweite haben das Prozentzeichen. Und ich habe festgestellt, dass ich in der Batch-Datei mit %% entkommen kann. Aber es scheint nicht zu funktionieren und ich finde eine leere Datei wie oben.

xml ed -P --update /ns2:ExportManifest/ExportManifestEntity[@path='home/user_name/11.05.DEV CFD commits %%28feature %%26 bug%%29 by Program.xanalyzer']/ExportManifestProperty/EntityMetaData/@name -v 11.05.DEV CFD commits (feature & bug) by Program.xanalyzer someFile.xml > someFileNew.xml & move /Y someFileNew.xml someFile.xml 

Irgendwelche Ideen?

+1

Siehe '(Feature & Bug)' Teil Ihrer Befehlszeile: die Und-Zeichen wie '^ & 'entkam werden muss; Wenn dieser Code zwischen einem Klammerpaar steht, müssen Sie das ')' wie '^)' ... – aschipfl

+0

Vielen Dank! Ich werde das versuchen. Hast du etwas im ersten Befehl gefunden? – Nikhil

+0

Ich ersetzte (Feature & Bug) durch^(Feature^& Bug ^), aber ich habe das gleiche Problem. – Nikhil

Antwort

0

Wenn Sie die xmlstarlet-Befehle in der Stapelverarbeitungsdatei ausführen, müssen Sie sehr vorsichtig mit Leerzeichen in den Attributwerten sein. Ich musste "" verwenden, um Windows zu sagen, dass alles String hier ist. Aber ich musste auch '' verwenden, um sicherzustellen, dass der Attributwert erfolgreich gelesen und abgeglichen wird. Hier ist die Lösung:

Neuer Wert, der den alten ersetzt, sollte auch in den Anführungszeichen stehen.

xml ed -P --update /ns2:ExportManifest/ExportManifestEntity[@path="'home/user_name/11.05 CFD Developer commits.xanalyzer'"]/ExportManifestProperty/EntityMetaData/@name -v "11.05 CFD Developer commits.xanalyzer" someFile.xml > someFileNew.xml & move /Y someFileNew.xml someFile.xml 

Ich tat das gleiche für den zweiten Befehl:

xml ed -P --update /ns2:ExportManifest/ExportManifestEntity[@path="'home/user_name/11.05.DEV CFD commits %%28feature %%26 bug%%29 by Program.xanalyzer'"]/ExportManifestProperty/EntityMetaData/@name -v "11.05.DEV CFD commits (feature & bug) by Program.xanalyzer" someFile.xml > someFileNew.xml & move /Y someFileNew.xml someFile.xml 
+0

Das '' 'sagt dem Windows, das Argument nicht durch Whitespace aufzuteilen, das' '' zeigt ein String-Literal auf xmlstarlet an. Sie können das '' 'um das ganze Argument setzen (' --update "/ ns2: ExportManifest ..../@ name "-v') – npostavs

Verwandte Themen