2016-11-04 8 views
0

xmlstarletを使用してxmlファイルを編集しています。私はこれらの2つのコマンドの問題に具体的に直面しています。バッチファイルで特殊文字をエスケープする問題

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 

このコマンドは、想定されていません。上記のcoomandを実行した後、ファイルが空であることがわかります。このコマンドを動作させるために脱出する必要があるものはありますか?

2番目にパーセント記号があります。そして、バッチファイルでは、%%を使ってエスケープすることができます。しかし、うまく動作していないようで、上記と同じ空のファイルがあります。

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 

+1

は、コマンドラインの '(機能&バグ)'の部分を参照してください:アンパサンドは、 '^&'のようにエスケープする必要があります。このコードが一対のかっこの間に置かれている場合は、 ')'のように ')'をエスケープする必要があります... – aschipfl

+0

ありがとう!私はそれを試みます。あなたは最初のコマンドで何かを見つけましたか? – Nikhil

+0

私は(feature&bug)を^(feature ^&bug ^)に置き換えましたが、私は同じ問題に直面しています。 – Nikhil

答えて

0

バッチファイルでxmlstarletコマンドを実行する場合は、属性値のスペースに非常に注意する必要があります。私は""を使用して、すべてがStringであることをウィンドウに伝えなければなりませんでした。しかし、私は''も使用して、属性値が正しく読み込まれて一致することを確認しなければなりませんでした。ここに解決策があります:

古い値を置き換える新しい値も二重引用符で囲む必要があります。

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 

私は2番目のコマンドで同じことをした:

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

'' 'はWindowsに空白で引数を分割しないように指示します。' 'はxmlstarletの文字列リテラルを示します。引数全体に' ''を置くことができます( '--update"/ns2:ExportManifest ..../@ name "-v') – npostavs

関連する問題