許せない心理テスト

バッチファイルで変数の中身をファイルに出力するにはどうしたらいいでしょうか
例えばDATAという変数の中身をそのまま、OUTPUT_FILE変数が示すファイルに出力したいです
以下ではうまくいきませんでした
echo %DATA%>%OUTPUT_FILE%
ECHO は <ON> です。とでることがあります

A 回答 (2件)

そのままの構文でも、変数のデータが以下の様な感じなら不具合は起きないはずです。



@echo off
set DATA=xxx
set OUTPUT_FILE=OUTPUT_FILE.txt
echo %DATA%>%OUTPUT_FILE%

不具合が起きる原因として考えられるのは、
パスや変数に、特殊な意味を持つ半角記号が含まれる場合です。

「"」「<」「>」「&」「|」「%」と、半角スペースです。

これらは、エスケープをし、文字として認識させる必要があります。

「%」以外の半角記号は、
「^」を使ってエスケープします。

「%」は「%」を使ってエスケープします。
つまり、「%%」と書きます。
コマンドプロンプトで直接打っている場合は、必要ないかも知れません。

例えば、上記の構文を使って、
「&」という文字をファイル出力したいとします。

「set DATA=&」としてしまうと、
「&」は特殊な意味がある記号ですから、うまくセットされません。

「&」をエスケープする為に、「^」を付けて、
「set DATA=^&」とすると、
「DATA」に「&」がセットされた状態にはなりますが、
ファイル出力はうまくいきません。
「echo &>%OUTPUT_FILE%」という状態になっているからです。

うまく「&」をファイル出力するには、
「echo ^&>%OUTPUT_FILE%」という状態にしなくてはいけません。

ですので、変数「DATA」をセットする段階で、
「^」を「^^」とエスケープし、
「&」を「^&」とエスケープし、
「set DATA=^^^&」とすると、
「DATA」に「^&」がセットされた状態になり、
「echo ^&>%OUTPUT_FILE%」となり、
これでやっと「&」がファイル出力されます。

エスケープが面倒な場合は、「"」で囲むと、その間にある半角記号は基本的に文字として認識されますが、「%」と「"」が入っている場合はうまくいきませんので注意が必要です。

「&」を「"」で囲む例は以下の通りです。

set DATA="&"
echo %DATA%>%OUTPUT_FILE%

ただ、これだと、最初と最後に「"」が付いた状態で出力されます。

あと、パスに関しては、
個人的には、全て「"」で囲んだ方が無難だと思います。

変数に入れるパスは、
「"」無しの方が、後々扱いやすいかと思います。
    • good
    • 1
この回答へのお礼

えっと、そのままでは不具合が起きるので質問をしました。
この後いろいろ調べてみましたが、バッチファイルではやりたいことをやるのが難しいことがわかりました
他の方法を考えてみようと思います

お礼日時:2015/12/15 22:33

%DATA%が空もしくは空白だけだとそう(ECHO は <ON>)なりますね。


また、> の直前つまり%DATA%の末尾が一桁の数字の場合もファイルディスクリプタ番号の指定とみなされます。

>%OUTPUT_FILE% echo,%DATA%

のように、
・リダイレクトは行頭に書く
・echoの直後に記号を書く
といいです。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

ECHO は <ON>がでなくなりました。

お礼日時:2015/12/15 22:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A