- ベストアンサー
バッチコマンドの「set」で入力した内容をファイルに出力する場合の問題点
DOSのバッチコマンドで以下のようなものを作りました。 set /p abc= echo %abc% > nyuryoku.txt 画面から入力した文字を「nyuryoku.txt」に出力することを意図したものですが、2つ問題が出ています。 (1)何も入力しないと、「nyuryoku.txt」に「ECHO は <ON> です。」と出力されてしまいます。 これは「」(つまりNULL値)を出力できないでしょうか。 (2)「123」を入力すると「nyuryoku.txt」に「123 」と出力されてしまします。つまり最後に半角スペースがついてしまいます。 これは「123」を出力できないでしょうか。 すみません。おわかりになる方がいたら教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
たしかに数字一文字では正常に出力されませんね。 どうやら遅延環境変数の展開で解決できそうです。 修正版を書きます。 setlocal enabledelayedexpansion set abc=. set /p abc= if %abc%==. goto e echo !abc!>test.txt :e end local これでどうでしょうか? お試し下さい。
その他の回答 (6)
- Yorisin
- ベストアンサー率54% (364/663)
No.5 magician_1さんのそのままではうまく動かなそうです。 これでどうでしょうか? set abc=. set /p abc= if %abc%==. goto e echo %abc%>test.txt :e この場合、"." (ドット)一文字だけの入力は禁止として運用します。
お礼
ご回答ありがとうございました。 ただ、他の方にも補足しましたが、「1」だけ入れるとうまく出力しないようです。「123」だときちんと出力されます。 ムムム わからなくなってきました。
- magician_1
- ベストアンサー率26% (27/101)
これで、何も入力しないときは何も出力できないように出来ます。 set /p abc= if %abc%=="" e echo %abc%>test.txt :e
お礼
ご回答ありがとうございました。 想定通りの運用ができそうです。 ありがとうございました。
No.1です。 すみません。上記回答は質問の趣旨と違いましたね。ごめんなさい。
お礼
>すみません。上記回答は質問の趣旨と違いましたね。ごめんなさい。 いえいえ、ご検討いただきありがとうございますm(_._)m ECHOを使わない方法もありですかね。 要はテキストファイルに出力したいだけなので。。。 もし何かわかりましたら教えてください。
No.1です。 ひょっとして途中で改行していませんか。つまりechoのみの行があるのではないでしょうか。その場合 echo\ とすれば何も表示されずに改行されます。
お礼
ご回答ありがとうございました。
- Yorisin
- ベストアンサー率54% (364/663)
(2)については、 リダイレクト部分の半角スペースを消せば直ると思います。 echo %abc%>nyuryoku.txt でどうでしょうか。
お礼
おっしゃるとおりに修正してみたら、半角スペースがとれました。 ありがとうございました! (2)は解決しました!!! あとは(1)だけです。これって結構難問なんでしょうか???
補足
お礼をした後に補足させていただきます。 いろいろ動かして気づいたのですが、「1」だけ入れるとうまく出力しないようです。「123」だときちんと出力されます。桁数の問題でしょうか。 ムムム わからなくなってきました。
(1)については「echo off」で対応できると思います。この「echo off」自身の表示も出したくなければ、「@echo off」とします。 すみませんが(2)についてはわかりません。
お礼
ご回答ありがとうございました。 ただ、修正してみたのですが、今度は 「ECHO は <OFF> です。」 が出てしまいました。 ECHOで実施するとそうなってしまうということなのでしょうかね。 難しいです。。。
お礼
ご回答大変ありがとうございました。 できるようになりました。