質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • コマンドプロンプト

    358questions

    コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

  • バッチファイル

    238questions

    バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

変数を表示しようとすると「ECHOは<OFF>です」と表示される

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,331

evilscope

score 9

@echo off

for /f "tokens=2 delims=: " %%A in ('findstr AAA LOG.txt') do set A=%%A&goto NXT
:NXT

echo %A%

LOG.txt

AAA:123456
AAA:5555555

LOG.txtに対してDOS.batを実行すると123456と正しく表示されるのですが、

AAA:123456
AAA:5555555
BBB:456789
CCC:987654


に対して

@echo off

for /f "tokens=2 delims=: " %%A in ('findstr AAA LOG.txt') do set A=%%A&goto NXT01

:NXT01
echo %A%

for /f "tokens=2 delims=: " %%B in ('findstr BBB LOG.txt') do set B=%%B&goto NXT02

:NXT02
echo %B%

for /f "tokens=2 delims=: " %%C in ('findstr CCC LOG.txt') do set C=%%C&goto NXT03

:NXT03
echo %C%


を実行するとなぜかECHOは<OFF>ですと表示されます。
本来はここでとってきた情報をもとにデータベースに保存しようと考えています。

なので抜き出した後に、sql文に挿入しようとしているので困っています。
なぜ表示できないのかご教授願います。

最終結果は

123456
456789
987654


と結果が出るのが目標です。

追記

@echo offなしで実行すると

set A=123456
set B=456789
set C=987654


とコマンドプロンプトに表示されるので変数に代入できていないわけではなさそうです…

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

0

あなたが実行しているのが、質問文の通りでないので、希望通りの結果にならないのでしょう。
別の言い方をすると、あなたが実行している物を質問に掲載しているときに、コピペしていない。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/26 16:54

    すみません、まさにその通りでした。
    do set A=%%A&goto NXT01
    と質問文で書いてあるところを
    do set A = %%A&goto NXT01
    と書いていました。
    スペースを挟むと結果が変わるとは思っていなかったので放置しておりました。

    お騒がせいたしました。

    キャンセル

  • 2018/06/26 16:59

    evilscopeさん>
    素朴な質問なんですが、良くこの手の間違いをする質問者がいらっしゃいます(提示しているコードと実際に動かしているコードが違う)
    質問にコードを入力するときってわざわざ手打ちしているんでしょうか?

    キャンセル

  • 2018/06/26 17:00 編集

    環境変数名には空白を使えます。セットされる値にも前後の空白が含まれます。
    set A = 123
    echo %A %
    → 123
    末尾の空白もセットされるので、do set A=%%A&goto NXT01 も、&の前に空白を入れてしまうと、まずいです。
    do set A=%%A & goto NXT01 だと、%%Aのあとに空白がついた物がAにセットされる。

    キャンセル

  • 2018/06/26 17:05

    ttyp03様>
    私は手打ちで入力していました。
    また実際動かしていたコードにスペースが入っていた理由としては、今までHTMLやJavaScriptを使っていたため=の前後に空白を入れて見やすくしていたためです。

    キャンセル

  • 2018/06/26 17:07

    otn様>
    そうなんですね、知識不足でした。
    変数名が「A 」(空白あり)なのに対してechoで呼んできているのが「A」(空白なし)なので何も代入されていないため、
    「ECHOは<OFF>です」
    と表示されていたのですね。

    キャンセル

  • 2018/06/26 20:59

    > 私は手打ちで入力していました。
    何でまた?
    職場で発生した問題を紙で持ち帰って、自宅で手入力?
    にしては、時刻がおかしいか。

    キャンセル

  • 2018/06/27 10:16

    otn様>
    現在、社内システムを構築しており、社内情報の含まれる部分を任意の数字に置き換え、こちらに投稿している状態です。
    なので置き換えた際に誤って書いてしまったのです。
    今後はしっかりと精査したうえで投稿させていただきますので今後ともよろしくお願いいたします。

    キャンセル

  • 2018/06/27 10:19

    > 社内情報の含まれる部分を任意の数字に置き換え
    そのあと、それを実行して、現象が出ることを確認してから、それをコピペしてください。

    キャンセル

0

Windowsのechoは、引数を何も指定しない場合、現在のechoの状態を表示するという仕様になっています。

ifで空文字列の場合だけ別処理させるしかないかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

手元の環境で実行してみたところ問題なく動作しました。
ECHOは<OFF>ですがでるのは環境変数が空の場合、つまりfindstrで見つからなかった場合です。
findstrに与えている文字列、およびLOG.txtに格納されている文字列を改めて見直してみてください。
ちなみに環境変数A B Cを初期化しないと、見つからない場合でも前回の情報を表示してしまうので、頭で初期化したほうが良いでしょう。

@echo off

set A=
set B=
set C=

~省略~

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • コマンドプロンプト

    358questions

    コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

  • バッチファイル

    238questions

    バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。