これは非常に簡単かもしれませんが、ネット上での答えはありませんでした。 XML行をバッチ経由でファイルにエコーしたいのですが、リダイレクト ">"のXML終了タグを誤解しています。行は次のとおりです。
echo <?xml version="1.0" encoding="utf-8" ?> > myfile.xml
特別な文字列を解釈しないようにバッチパーサーにヒントを与える方法はありますか?二重引用符を使用しましたが、それらもファイルに書き込みます!エコー後のファイルは次のようになります。
<?xml version="1.0" encoding="utf-8" ?>
^
でシェルのメタキャラクターをエスケープできます:
echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml
echo
はシェルに組み込まれているため、引用に関する通常の規則に従っていないため、引数を引用するだけで引用を削除せずに出力することに注意してください。
エコー付きのWindowsで「>」などの特殊文字を使用するには、その前に特殊なエスケープ文字を配置する必要があります。
例えば
echo A->B
「>」は「^」でエスケープする必要があるため、機能しません。
echo A-^>B
エスケープシーケンス も参照してください。
特殊な文字とそのエスケープシーケンスの基本セットを出力する短いバッチファイルがあります。
別の方法:
@echo off
for /f "useback delims=" %%_ in (%0) do (
if "%%_"=="___ATAD___" set $=
if defined $ echo(%%_
if "%%_"=="___DATA___" set $=1
)
pause
goto :eof
___DATA___
<?xml version="1.0" encoding="utf-8" ?>
<root>
<data id="1">
hello world
</data>
</root>
___ATAD___
rem #
rem #
簡単な解決策の1つは、特殊文字を変更しないため、遅延展開を使用することです。
set "line=<?xml version="1.0" encoding="utf-8" ?>"
setlocal EnableDelayedExpansion
(
echo !line!
) > myfile.xml
編集:別の解決策は、消える引用符を使用することです。
このテクニックは、引用符を使用して特殊文字を引用します
@echo off
setlocal EnableDelayedExpansion
set ""="
echo !"!<?xml version="1.0" encoding="utf-8" ?>
特殊文字フェーズでは、!"!
の先頭の引用符が行の残りを保持するため、トリックが機能します(他の引用符がない場合)。
そして遅延拡張フェーズでは、!"!
は変数"
の内容に置き換えられます(一重引用符は正式な名前です!)。
無効な遅延拡張を使用している場合は、代わりにFOR /F
ループを使用できます。
for /f %%^" in ("""") do echo(%%~" <?xml version="1.0" encoding="utf-8" ?>
しかし、これは少し面倒だと思われるので、マクロを作成することもできます。
set "print=for /f %%^" in ("""") do echo(%%~""
%print%<?xml version="1.0" encoding="utf-8" ?>
%print% Special characters like &|<>^ works now without escaping
>
文字を出力する方法は、^
エスケープ文字を先頭に追加することです。
echo ^>
単純に印刷します
>
ジョーイからの答えは私には役に立たなかった。実行後
echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml
このエラーが発生しましたbash:予期しないトークン `> 'に近い構文エラー
このソリューションは私のために働いた:
echo "<?xml version=\"1.0\" encoding=\"utf-8\">" > myfile.txt
単一引用符を使用しないのはなぜですか?
echo '<?xml version="1.0" encoding="utf-8" ?>'
出力
<?xml version="1.0" encoding="utf-8" ?>