@echo off
cls
set LOGFILE=C:\%COMPUTERNAME%.log
find C:\temp\setting.txt "SERVER01" /I
if %ERRORLEVEL% == 1 GOTO END
if %ERRORLEVEL% == 0 (
set MESSAGE=SEVER01の環境です
echo %MESSAGE%
echo %MESSAGE% >> %LOGFILE%
GOTO SET1
)
:SET1
echo テスト >> %LOGFILE%
:END
こんな簡単なBATを作成してみましたがERRORLEVELが0の時処理されません
(「SEVER01の環境です」がLOGに書き込まれません)
(もちろんsetting.txtには「SERVER01」の文字が入ってます)
(FINDのあと、「echo %errorlevel」を記述して0にもなっているのですが)
IFの構文として間違っていますか?どなたかご教授ください。
OSはWindowsXP SP3 64Bitです。
No.4ベストアンサー
- 回答日時:
バッチファイルでは ( から ) の処理は ( に到達した時点で環境変数が展開され処理されます
簡単に言えば、()の中でsetした環境変数は、()を抜けてからしか有効にならないのです
バッチファイルで以下を実行してみてください
@echo off
(
set MESSAGE=1回目のメッセージ
echo 1回目 %MESSAGE%
)
(
set MESSAGE=2回目のメッセージ
echo 2回目 %MESSAGE%
)
pause>NUL
exit /b
解決方法ですが、
set MESSAGE=SEVER01の環境です
の処理を()の外で、もっと上の方で行う(set LOGFILEの次行辺り)方法が簡単です
遅延環境変数の展開という機能もあり、こちらであれば()内でsetした環境変数を使えますので
気になったら調べてみてください
レス感謝です。
「遅延環境変数の展開」非常に参考になりました。
他会社からもらったBATには遅延環境変数が記述してあり
なぞがようやくとけました。
No.3
- 回答日時:
この手のものは、WSH、PowerShellで作成されることをお勧めします。
内容が簡単かどうかではなく、それぞれのシェルやスクリプト実行環境で不得意な所があります。で、問題の所ですが、No1の方を指示します。
また、回避方法ですが、「findが0意外の時」を拾うほうが確実に動作します。つまり、
@echo off
if ERRORLEVEL == 1 (echo err) else (echo suc)
ですね。findなどが何を返すか、微妙な所があり、全部のケースをためしてみましたか?
その試した結果で、組む必要があります。
No.1
- 回答日時:
>if %ERRORLEVEL% == 1 GOTO END
>if %ERRORLEVEL% == 0 (
if ERRORLEVEL == 1 GOTO END
if ERRORLEVEL == 0 (
のように%ERRORLEVEL%ではなくERRORLEVELではどうでしょうか
参考URL:http://www.atmarkit.co.jp/fwin2k/operation/comma …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- その他(開発・運用・管理) Windowsバッチファイルでリモートデスクトップを自動ログインするが確認画面が出る対処方法 1 2022/12/19 15:48
- その他(プログラミング・Web制作) zshの例外処理 1 2022/06/02 16:36
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチでテキストファイルから...
-
呼び出し元バッチを知るには?
-
コマンドプロンプト標準出力と...
-
加工バッチ
-
バッチファイルで2つ以上の変...
-
Excelで住所録を地域ごとに振り...
-
VBアプリケーションで終了コー...
-
DOSコマンドでファイル名の一部...
-
ファイル名に日時挿入バッチフ...
-
☆BAT:日時をTXTファイル名にし...
-
バッチプログラムで変数の参照...
-
batの変数を直接vbsのプログラ...
-
バッチファイルで常に最新の現...
-
コマンドプロンプトのエラーに...
-
コマンドプロンプトの「%1」と...
-
大量のフォルダからひとつのフ...
-
Windows10にデュアルブートでXP...
-
binファイルを解凍したいの...
-
binフォルダーとは?
-
多数のサブディレクトリ内のフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチでテキストファイルから...
-
コマンドプロンプト標準出力と...
-
バッチファイルで昨日の日付を取得
-
コマンドプロンプトで2ヶ月前3...
-
コマンドプロンプト(バッチファ...
-
絶対パス名からファイル名を取...
-
バッチファイルでDirで取得した...
-
VBアプリケーションで終了コー...
-
コマンドプロンプト画面の閉じ...
-
IPアドレスの第3オクテットだ...
-
呼び出し元バッチを知るには?
-
DOSのバッチで、テキストファイ...
-
バッチファイル テキストファイ...
-
C#でメジャーなバッチフレーム...
-
バッチファイルで常に最新の現...
-
コマンドプロンプトでファイル...
-
Kシェルでgotoのような処理を作...
-
子バッチ内のキー入力処理へ自...
-
バッチファイルで2つ以上の変...
-
echoとsystem関数について
おすすめ情報