バッチ reg query コマンドの結果におけるエラーメッセージの表示を抑制する方法

このQ&Aのポイント
  • バッチファイルにてレジストリのキーの存在の有無を知るためには、reg query コマンドを使用します。
  • しかし、キーが存在しない場合には「指定されたレジストリ キーまたは値が見つかりませんでした」というエラーメッセージが表示されます。
  • このエラーメッセージを表示させない方法として、reg query コマンドの後ろに「1>nul 2>&1」と記述することで抑制することができます。
回答を見る
  • ベストアンサー

バッチ 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の見方?)を教えてください。 宜しくお願いします。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4851/10265)
回答No.1

>あったので真似てみましたが、レジストリキーがあってもなくても ErrorLevel は常に同じ値に なるばかりです。 それはおかしいですね。何らかの勘違い、または、タイプミスでしょう。 >「reg query "パス" 1>nul 2>&1」 の正しい使い方 結果出力は、1番に出るので、「コマンド >ファイル」もしくは「コマンド 1>ファイル」でリダイレクトします。 エラーメッセージは2番に出るので、「コマンド 2>ファイル」でリダイレクトします。 つまり、一切表示させたくないなら、「コマンド >NUL 2>NUL」です。「2>&1」は、「2番は1番と同じ」ということで、「コマンド >NUL 2>NUL」と「コマンド >NUL 2>&1」と「コマンド 2>NUL 1>&2」とは同じ働きです。 >(ErrorLevelの見方?)を教えてください。 reg query HKLM\Software >NUL 2>&1 echo %ERRORLEVEL% reg query HKLM\SoftwareXX >NUL 2>&1 echo %ERRORLEVEL% とコマンドプロンプトで打ち込んでみてください。上が0、下が1を表示するはず。

zoooooon
質問者

お礼

notnot様 とてもとても丁寧な開設ありがとうございました。 頂いた回答を元に書き直してみました 欲しい結果が得られました。 ほんとうにありがとうございました。

関連する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 以降の指定が不正なようですが、クォーテーションの付け方で対応できるでしょうか?

  • batファイルで結果を表示しない方法

    batファイルで以下のようにレジストリキーの有無を確認し処理を分けたのですが、キーがあった場合には指定したキー下が表示され、キーがない場合には「エラー: 指定されたレジストリ キーまたは値が見つかりませんでした」が表示されてしまいます。 reg query キー名 IF error level 1 goto A IF error level 0 goto B reg queryの結果を表示しないにはどのようにしたら良いでしょうか?

  • 怪しいレジストリキー "HKEY_LOCAL_MACHINE\SOFT

    怪しいレジストリキー "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ ` '>m* " Windows XP HOME SP3を使用しています。 最近、別の用事でレジストリエディタを開いたら、上記のレジストリキーを見つけました。 普通レジストリのキーの名称などはソフトウェアの名前などもっともらしいものですが、 " ` '>m* " というのはとても何かまっとうなソフトウェアが使っているレジストリとは思えません。 ちなみにこのキーの下には 369f7183282ffae1    REG_QWORD という値がありますが、これも何のことだかわかりません。 Google等で調べてみましたが適切な情報は得られませんでした。 そこで以下の点についてどなたか詳しい方にご教授いただければ幸いです。 (質問1) これは何のソフトウェアが何の目的で使うものなのでしょうか。 (質問2) このまま放っておいていいものでしょうか、それとも削除したほうがいいのでしょうか。逆に削除することにリスクはありますでしょうか。 どうぞよろしくお願いいたします。

  • 「コマンドライン パラメータが多すぎます」と怒られてしまいます。

    「コマンドライン パラメータが多すぎます」と怒られてしまいます。 WindowsXP SP3を使用しています。 コマンドプロンプトで以下の内容を入力しEnterキーを押すと、「コマンドライン パラメータが多すぎます」と怒られてしまいます。 REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Internet Explorer\Main" /v TabProcGrowth t/ REG_SZ /d "0" /f ※ちなみに、内容は、IEのプロセスが2つになってしまうのを、1つにするためのレジストリ設定です。 パスの途中に半角スペースがあるので、ちゃんとダブルクオーテーションで囲っているのですが、何故かダメです。 どうかご教示いただけないでしょうか。よろしくお願いします。

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

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

  • batのreg exportで改行を入れる方法

    batのreg exportを使ってレジストリの一部をエクスポートしたいと考えています REG EXPORT "HKEY_CURRENT_USER\Software\Vision Thing\PSEmu Pro" "ePSXe設定.reg" とすると、うまくいくのですが REG EXPORT ^ "HKEY_CURRENT_USER\Software\Vision Thing\PSEmu Pro" ^ "ePSXe設定.reg" とすると、なぜか「^」というファイル名で出力されてしまいます。 ""はパスの中にスペースが入っていると必須なのですが REG EXPORT ^ HKEY_CURRENT_USER\Software ^ "ePSXe設定.reg" のようにして""を外してやるとうまくいきます。 どうも""と^を同時に使うとうまくいかないようです。 どうすれば同時に使えますでしょうか?

  • バッチでのレジストリPath環境変数方法

    バッチでのレジストリPath環境変数方法 お世話になっております。 レジストリのPath環境変数をバッチで変更しようとています。 バッチ処理の動きとしては、下記の処理をするバッチを 作りたいのですが、上手くいきません。 ≪処理≫ 1、reg queryで、指定されたPath設定を検索 2、if errorlevel ~ 構文で   if errorlevel 1 goto tran1   goto tran2     2-1、指定されたPath設定がなければ、3へ。   2-2、指定されたPath設定があれば、 4へ。     (指定されたPath環境変数は設定済み)    3、reg addで、Path環境変数を変更する 4、次の処理実施   (指定されたPath環境変数は設定済) 具体的な処理内容は、下記のような記述をしてます。 ≪バッチ内容(例)≫ @echo off reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path | findstr /i "C:\Program Files\navnt" if errorlevel 1 goto tran1 goto tran2 :tran1 reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path /t REG_EXPAND_SZ /d "%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\navnt" /f :tran2 echo 次の処理へ しかし、実行すると、全てTran2へ行く処理になってしまい、Tran1への処理になりません。    ※reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path | findstr /i "C:\Program Files\navnt"  | findstr /i "C:\Program Files\navnt" 箇所の、findstr が上手く機能してないと思ってます。   オプションもいくつか追加して試しましたが、上手くいきませんでした。  (試)  findstr の /c:文字列 を追加  ⇒ 結果、NG ~ | findstr /i /c:"C:\Program Files\navnt" findstrの記述が原因と思いますが、 ●tran1の reg addへ飛ぶ処理の記述をご教授頂けますか? 宜しくお願い致します。

  • コマンドプロンプトからレジストリの確認

    WindowsXPのpatch(KB823980)をあてたので バッチファイルを作成し、確認しようとと思ってます。 (700台ぐらいあるため手作業では厳しいので) 方法として、レジストリキーの HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\SP1\KB823980 が存在するかどうかで判断しようと思っています。 が レジストリキーの参照方法がわかりません。 (レジストリエディタを開いてとかではなく  バッチファイルの中で実施したいです。  たとえば、if文で存在の是非を判別するとかです。) また、無理であれば、 patchがあたっているかどうかを バッチファイルを使用して確認できる方法があれば 教えてもらえないでしょうか。 (ちなみにプログラムの追加と削除にそのpatchは表示されています。) よろしくお願い致します。

  • レジストリエディタ エントリの作成の仕方

    レジストリの修正をしたいのですが、 「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\drivers.desc」キーを開き、その中に次のエントリを作成し値を設定します。 エントリ名「msacm32.drv」、種類「文字列値(REG_SZ)」、値「msacm32.drv」 「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32」キーを開き、その中に次の2つのエントリを作成し値を設定します。 エントリ名「wavemapper」、種類「文字列値(REG_SZ)」、値「msacm32.drv」 エントリ名「midimapper」、種類「文字列値(REG_SZ)」、値「midimap.dll」 と書いてある通りにしたいのですが、どなたか分かりやすく説明していただけないでしょうか

  • .regファイルの作成

    数十台のPCに「ネットワークアクセス認証のための資格情報を保存させない」設定を するために、.regファイルを作りたいのですが、以下の内容で大丈夫でしょうか? Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] "disabledomaincreds"=dword:00000001 作成に当たって、同設定をしたPCで、レジストリエディタからregファイルを エクスポートしてみると、~/Lsaには"disabledomaincreds"以外にもいくつも 名前が出てくるので、不安になったので質問します。