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

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

新規登録して質問してみよう
ただいま回答率
85.50%
コマンドプロンプト

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

バッチファイル

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

Q&A

解決済

3回答

37629閲覧

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

evilscope

総合スコア16

コマンドプロンプト

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

バッチファイル

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

0グッド

0クリップ

投稿2018/06/26 05:26

編集2018/06/26 06:18

DOS

1@echo off 2 3for /f "tokens=2 delims=: " %%A in ('findstr AAA LOG.txt') do set A=%%A&goto NXT 4:NXT 5 6echo %A%

LOG.txt

text

1AAA:123456 2AAA:5555555

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

text

1AAA:123456 2AAA:5555555 3BBB:456789 4CCC:987654

に対して

DOS

1@echo off 2 3for /f "tokens=2 delims=: " %%A in ('findstr AAA LOG.txt') do set A=%%A&goto NXT01 4 5:NXT01 6echo %A% 7 8for /f "tokens=2 delims=: " %%B in ('findstr BBB LOG.txt') do set B=%%B&goto NXT02 9 10:NXT02 11echo %B% 12 13for /f "tokens=2 delims=: " %%C in ('findstr CCC LOG.txt') do set C=%%C&goto NXT03 14 15:NXT03 16echo %C%

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

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

最終結果は

123456 456789 987654

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

###追記
@echo offなしで実行すると

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

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

投稿2018/06/26 06:49

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

evilscope

2018/06/26 07:54

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

2018/06/26 07:59

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

2018/06/26 08:02 編集

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

2018/06/26 08:05

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

2018/06/26 08:07

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

2018/06/26 11:59

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

2018/06/27 01:16

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

2018/06/27 01:19

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

0

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

BAT

1@echo off 2 3set A= 4set B= 5set C= 6 7~省略~

投稿2018/06/26 05:55

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2018/06/26 05:37

maisumakun

総合スコア145123

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問