web-dev-qa-db-ja.com

特殊文字を使用したバッチエコーの使用

これは非常に簡単かもしれませんが、ネット上での答えはありませんでした。 XML行をバッチ経由でファイルにエコーしたいのですが、リダイレクト ">"のXML終了タグを誤解しています。行は次のとおりです。

echo <?xml version="1.0" encoding="utf-8" ?> > myfile.xml

特別な文字列を解釈しないようにバッチパーサーにヒントを与える方法はありますか?二重引用符を使用しましたが、それらもファイルに書き込みます!エコー後のファイルは次のようになります。

<?xml version="1.0" encoding="utf-8" ?>
61
Amir Zadeh

^でシェルのメタキャラクターをエスケープできます:

echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml

echoはシェルに組み込まれているため、引用に関する通常の規則に従っていないため、引数を引用するだけで引用を削除せずに出力することに注意してください。

93
Joey

エコー付きのWindowsで「>」などの特殊文字を使用するには、その前に特殊なエスケープ文字を配置する必要があります。

例えば

echo A->B

「>」は「^」でエスケープする必要があるため、機能しません。

 echo A-^>B

エスケープシーケンス も参照してください。 enter image description here

特殊な文字とそのエスケープシーケンスの基本セットを出力する短いバッチファイルがあります。

20
orbitcowboy

別の方法:

@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 # 
18
walid2mi

簡単な解決策の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
16
jeb

>文字を出力する方法は、^エスケープ文字を先頭に追加することです。

echo ^>

単純に印刷します

>
10
Aleks G

ジョーイからの答えは私には役に立たなかった。実行後

  echo ^<?xml version="1.0" encoding="utf-8" ?^> > myfile.xml

このエラーが発生しましたbash:予期しないトークン `> 'に近い構文エラー

このソリューションは私のために働いた:

 echo "<?xml version=\"1.0\" encoding=\"utf-8\">" > myfile.txt

こちらもご覧ください http://www.robvanderwoude.com/escapechars.php

2
Competo

単一引用符を使用しないのはなぜですか?

echo '<?xml version="1.0" encoding="utf-8" ?>'

出力

<?xml version="1.0" encoding="utf-8" ?>
0
fangxing