TEXT.TXTにはabcがあります。しかし、findとnot findが両方出力されてしまいます。
どうしてでしょうか?
@echo off
find "abc" text.txt
echo %errorlevel%
if errorlevel==0 GOTO LABEL1
:LABEL1
echo find
if errorlevel==1 GOTO LABEL2
:LABEL2
echo not find
落ち着くのだ。
@echo off find "abc" text.txt echo %errorlevel% if errorlevel==1 GOTO LABEL2 echo find GOTO END :LABEL2 echo not find :END
Windows 7 Pro x64で試してみました。
下記の様に、GOTOからechoまでをカッコでくくると正常に動作します。
@echo off
find "abc" text.txt
echo %errorlevel%
if errorlevel == 0 (
GOTO LABEL1
:LABEL1
echo find
)
if errorlevel == 1 (
GOTO LABEL2
:LABEL2
echo not find
)
IF文はその直後の一文だけに対して作用するはずですので、元のコードではGOTOだけがIF文の分岐対象になるのではないでしょうか。
ありがとうございます。xxxxxxxをfindするようにするとfindとnot findが両方表示されてしまいます。どうしてか分かりますか? 実は私が書いていたときも同じ現象で分からずじまいでした。
よろしくお願いします。
すいません、色々調べてみたのですが分かりませんでした。
私の環境でも、xxxxxxxを検索するとfind,not find両方が表示されます。
@echo off find "abc" text.txt echo %errorlevel% if errorlevel==0 GOTO LABEL1 :LABEL1 echo find goto KOKONITOBU if errorlevel==1 GOTO LABEL2 :LABEL2 echo not find goto KOKONITOBU :KOKONITOBU pause
GOTOをつかってみましょう。
ありがとうございます。abcでfindしてfindと表示されました。ちなみにxxxxxxとしてもfindと表示されました。xxxxxxxはtext.txtにはないです。もしよろしければなぜ、どちらのパターンでもfindと表示されてしまうか教えてくれますか?私もずーとこれで悩んでいました。
すみません。飛び先に釣られて見てしまったので、この回答では上手くいっていないかと思います。
No4(この下)の回答内容で上手く動作します。
http://q.hatena.ne.jp/1397137974#a1227238
if 文の書き方も間違ってるんですが、そこがあってたとしても、GOTO の飛び先が良くない。
if 文での ERRORLEVEL の扱い方も、違ってます。
よくあるプログラミング言語と違って、== のような演算子が入りません。
http://technet.microsoft.com/en-us/library/cc754335.aspx
Syntax
if [not] ERRORLEVEL <Number> <Command> [else <Expression>]
if [not] <String1>==<String2> <Command> [else <Expression>]
if [not] exist <FileName> <Command> [else <Expression>]
んで、こんな感じ。
@echo off
find "abc" text.txt
echo %errorlevel%
if ERRORLEVEL 1 GOTO LABEL1
echo find
GOTO LABEL2
:LABEL1
echo not find
:LABEL2
あっ、演算子入れても、通りますね (^^;
ありがとうございます。よく分かりました。
さすがです。ありがとうございます。次はfindはerrorlevel=2があるのでlabel0,1,2を作ろうとおもっています。
2014/04/10 23:40:01