人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

dos batch programを書いています。windows7です。

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

●質問者: mai_mai_mail
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● Sampo
●25ポイント

落ち着くのだ。

@echo off
find "abc" text.txt
echo %errorlevel%
if errorlevel==1 GOTO LABEL2
echo find
GOTO END

:LABEL2 
echo not find

:END

mai_mai_mailさんのコメント
さすがです。ありがとうございます。次はfindはerrorlevel=2があるのでlabel0,1,2を作ろうとおもっています。

2 ● 犬猫ハーフ
●25ポイント

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文の分岐対象になるのではないでしょうか。


mai_mai_mailさんのコメント
ありがとうございます。xxxxxxxをfindするようにするとfindとnot findが両方表示されてしまいます。どうしてか分かりますか? 実は私が書いていたときも同じ現象で分からずじまいでした。 よろしくお願いします。

犬猫ハーフさんのコメント
すいません、色々調べてみたのですが分かりませんでした。 私の環境でも、xxxxxxxを検索するとfind,not find両方が表示されます。

3 ● ぽけっとしすてむ
●25ポイント
@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をつかってみましょう。


ぽけっとしすてむさんのコメント
おっと、被りましたね…

mai_mai_mailさんのコメント
ありがとうございます。abcでfindしてfindと表示されました。ちなみにxxxxxxとしてもfindと表示されました。xxxxxxxはtext.txtにはないです。もしよろしければなぜ、どちらのパターンでもfindと表示されてしまうか教えてくれますか?私もずーとこれで悩んでいました。

ぽけっとしすてむさんのコメント
すみません。飛び先に釣られて見てしまったので、この回答では上手くいっていないかと思います。 No4(この下)の回答内容で上手く動作します。 http://q.hatena.ne.jp/1397137974#a1227238

4 ● a-kuma3
●25ポイント

if 文の書き方も間違ってるんですが、そこがあってたとしても、GOTO の飛び先が良くない。
f:id:a-kuma3:20140410232046p:image

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


a-kuma3さんのコメント
あっ、演算子入れても、通りますね (^^;

mai_mai_mailさんのコメント
ありがとうございます。よく分かりました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ