• ベストアンサー

バッチファイル 値を比較してメッセージを出力したい

forコマンドで取得したレジストリの値と比較して、同じでなければ「違います」のメッセージを出して、処理を中断したい。 ●試したコマンド: for /f "skip=4 tokens=2*" %%A in ('reg query %REGNAME% /v VVV') if not "%%B"=="1.1.1.1" echo "違います" ●求める結果: あるレジストリ値VVV のデータが1.1.1.1 でなかった場合に「違います」のメッセージを出したい 単にforコマンドとif分岐なのかもしれませんが、うまくいきません。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4856/10272)
回答No.3

ifが真の場合はgotoしますので、elseは不要です。elseの無いifが偽の場合は次の行が実行されます。 for /f "skip=4 tokens=2*" %%A in ('reg query %REGNAME% /v VVV') do if not "%%B"=="1.1.1.1" echo "違います"&pause&goto :END echo "合っています。"&pause :END elseを使うとすると、ifと同一行に書く必要があります。 for /f "skip=4 tokens=2*" %%A in ('reg query %REGNAME% /v VVV') do if not "%%B"=="1.1.1.1" (echo "違います")else(echo "合っています。") pause

indigo45kk
質問者

お礼

大変、参考になりました。助かりました。ありがとうございます!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4856/10272)
回答No.2

>表示しない方法 実行するコマンドが表示されるのを消したいと言うことなら、バッチファイルの先頭に @echo off と書けば、コマンドの実行結果しか表示されなくなります。 >また、「違います」の場合は、pauseでとめて:END する for /f "skip=4 tokens=2*" %%A in ('reg query %REGNAME% /v VVV') do if not "%%B"=="1.1.1.1" echo "違います"&pause&goto :END

indigo45kk
質問者

補足

ありがとうございます。大変参考になりました。更に質問なのですが、 比較した結果、合っていた場合、次の処理に移りたいのですが、elseを設定しても思うように動きません。 構文が間違えているのでしょうか? ●試したコマンド:教えていいただいたコマンド for /f "skip=4 tokens=2*" %%A in ('reg query %REGNAME% /v VVV') do if not "%%B"=="1.1.1.1" echo "違います"&pause&goto :END else goto A :A echo "合っています。""&pause&goto :END :END ●求める結果: あるレジストリ値VVV のデータが1.1.1.1 の場合に「合っています」のメッセージを出す

全文を見る
すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4856/10272)
回答No.1

do が抜けてますが、タイプミスでしょうか? for /f "skip=4 tokens=2*" %%A in ('reg query %REGNAME% /v VVV') do if not "%%B"=="1.1.1.1" echo "違います" でうまくいかないのであれば、 for /f "skip=4 tokens=2*" %%A in ('reg query %REGNAME% /v VVV') do echo "A=(%%A) B=(%%B)" とでも実行して%%Bがどうなっているかみてください。

indigo45kk
質問者

補足

ありがとうございます。教えていただいた記述で「違います」のメッセージを確認できました。しかし「違います」以外のコマンドもプロンプトウィンドウに表示されて、わかりにくいです。表示しない方法(clsでは「違います」まで消えてしまう)はないでしょうか?また、「違います」の場合は、pauseでとめて:END する 「違います」出ない場合は別処理げgoto する方法はないでしょうか?宜しくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • バッチファイル reg queryした値をreg add したい

    forコマンドで取得したレジストリの値をreg addしたいです。 ●試したコマンド: for /f "skip=4 tokens=2*" %%A in ('reg query %REG1% /v Data') do 'reg add %REG2% /v key /t REG_NOTE /d "%%B"\aaa' ●エラーメッセージ ''reg' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 ●求める結果: reg1の値Data から取得した値を、REG2の文字列値key に「取得値\aaa」 として追加したい。 reg add 以降の指定が不正なようですが、クォーテーションの付け方で対応できるでしょうか?

  • コマンドプロンプト 半角スペースを含んだ文字列の抽出

    ●ほしい文字列: C:\Program Files\aaa bbb ccc\aa bb ●reg quaryの結果: ! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\aaaRegister Dir REG_SZ C:\Program Files\aaa bbb ccc\aa bb ●試したコマンド: for /f "skip=2 tokens=3*" %A in ('reg query %REGNAME% /v Dir') do echo %A ●結果:C:\Program token=3-6 としても同じ結果です。 どのようなコマンドが適当なのでしょうか?宜しくお願いいたします。

  • Windows2000 バッチファイルコマンドについて

    こんにちは。 バッチファイルコマンド(DOSコマンド?)について質問があります。 まずやりたい事としては、 「前月日付のフォルダを自動作成したい」 です。 当月日付をもってくる為には以下の様なコマンドでできました。 for /f "tokens=1-2" %%l in ('date /t') do set today=%%l for /f "delims=/ tokens=1-2" %%a in ('echo %today%') do set yymm=%%a%%b このコマンドを実行すると、例えば、%yymm%には200507が入っています。 このコマンドを応用して、前月日付(200506)を取得したいのですが、何か言い方法はありませんでしょうか? また、新たなやり方あるのでしたら教えて頂けないでしょうか?

  • コマンドプロンプト 半角スペースを含んだ文字列の抽出

    コマンドプロンプト 半角スペースを含んだ文字列の抽出 したいです。 reg quaryの結果の一部をコマンドプロンプトで抽出したいのですが、半角スペースを含んでいるからか、求めるような結果が得られません。 ●ほしい文字列: C:\Program Files\aaa bbb ccc\aa bb ●reg quaryの結果: ! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\aaaRegister Dir REG_SZ C:\Program Files\aaa bbb ccc\aa bb ●試したコマンド: for /f "skip=2 tokens=\3,*" %A in ('reg query %REGNAME% /v Dir') do echo %A ●結果:C:\Program どのようなコマンドが適当なのでしょうか?宜しくお願いいたします。

  • コマンドプロンプト 全角を含んだ文字列の抽出

    ●ほしい文字列: C:\Program Files\全体\a b ●reg quaryの結果: ! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\goo Dir REG_SZ C:\Program Files\本体\a b ●試したコマンド: for /f "skip=2 tokens=2*" %A in ('reg query %REGNAME% /v Dir') do echo %B ●結果:C:\Program Files\全体\a 全角を含んでいると以降のスペース以下が取得できないようなのですが 全角の有無にかかわらず取得できる方法はないでしょうか? 宜しくお願いいたします。

  • バッチ reg query コマンドの結果

    バッチファイルにてレジストリのキーの存在の有無を知るために以下のコマンドラインを書きました。 reg query "HKEY_LOCAL_MACHINE\SOFTWARE\…" >nul if %ErrorLevel%==0 なら*** 0以外 なら*** 最後にnulを記述したのは結果を表示させたくないからです。 ところが、当該キーが存在する場合は良いのですが、キーが無かった場合 「エラー: 指定されたレジストリ キーまたは値が見つかりませんでした」と表示されてしまいます。 このメッセージを表示させない方法はないでしょうか? ネットで同様の問答がないか検索したところ reg query "パス" 1>nul 2>&1 で解決されると あったので真似てみましたが、レジストリキーがあってもなくても ErrorLevel は常に同じ値に なるばかりです。 解決する手段 または 「reg query "パス" 1>nul 2>&1」 の正しい使い方(ErrorLevelの見方?)を教えてください。 宜しくお願いします。

  • PostgreSQL インストール先の取得

    Windows7でレジストリよりPostgreSQLのインストール先をバッチで取得しようとしたのですが取得できませんでした。 同じ階層で「文字列値」に空白がない「Version」は取得できるのですが 「Base Directory」になると取得できません。 文字列値に空白がある場合「”~”(ダブルコーテーション)」でくくればいいとあったのですが、駄目でした。 どなたかご存知の方教えてください。 @echo off FOR /F "TOKENS=1,2,*" %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\PostgreSQL\Installations\postgresql-9.0" /v "Version"') DO IF "%%A"=="Version" SET GET_Version=%%C FOR /F "TOKENS=1,2,*" %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\PostgreSQL\Installations\postgresql-9.0" /v "Base Directory"') DO IF "%%A"=="Base Directory" SET GET_DIR=%%C echo PostgreSQL Version cho %GET_Version% echo PostgreSQL Directory echo %GET_DIR% pause exit

  • バッチファイルでレジストリの値を確認したい

    バッチファイルを使い指定したレジストリの値を確認するのに必要なコマンドはわかりました。しかし、実際にバッチファイルにして実行するとコマンドが永遠に実行され続ける状態となってしまいました。コマンドプロンプト上では正常に値が返ってきます。 バッチファイル実行時にコマンドは1回のみ実行され値が返ってくるようにするには何を付け足せばいいでしょうか。 実際のコマンド内容はこちらです。 バッチを実行してInitialEraYearの値を確認したい reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese /v InitialEraYear よろしくお願いいたします。

  • バッチでファイルの読み込み

    Windowsバッチでファイルの読み込みをしようと思っているのですが、 下記コマンドの実行で「ファイルが見つかりません」となります。 ※パスにスペースを含むのでusebackqを使用しました。 FOR /F "usebackq tokens=1,2 delims= " %%i in ("c:\temp 1\data.txt") DO echo %%i WindowsServer2003でうまくいかなかったのですが、 Xpですれば問題なくファイルを読み込めました。 何か差があるのでしょうか?

  • バッチ・ログファイルへの出力

    <子シェル.bat>に以下のように正常/異常のEXITコードを出力させてます。 コマンド if %ERRORLEVEL% EQU 0 exit 0 if %ERRORLEVEL% NEQ 0 exit 100 <<親シェル.bat>>より上記子シェルをCallして正常/異常時にログファイルへメッセージを出力しようと思っています。 下記のように書いても正常/異常終了と関係なくログファイルへの出力はされませんでした。子シェルの実行自体はされてます。。 call 子シェル.bat IF %ERRORLEVEL% EQU 0 echo "OK" >>%logfile% 2>&1 IF %ERRORLEVEL% NEQ 0 echo "NG" >>%logfile% 2>&1 何が原因なのでしょうか・・・