アプリ版:「スタンプのみでお礼する」機能のリリースについて

バッチでのレジストリ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へ飛ぶ処理の記述をご教授頂けますか?

宜しくお願い致します。

A 回答 (1件)

Topjackさんの


> ≪バッチ内容(例)≫
がどの程度正確に記載してくれたのかで変わるのですが、上記ではIF文の使い方が間違っていると思います。

if errorlevel 1 goto tran1

ERRORLEVELは変数ですので展開する必要があります。
誤 errorlevel
正 %errorlevel%

IF文は条件分岐ですので式が必要になります...ですので
%errorlevel% == 1

とする必要があります。
IF文が働かないのでこの行がスルーされて「goto tran2」が処理されているように思います。
まずはもう一度構文を見直されてはいかがでしょうか。

レジストリ関係ですので動確を得たものでお答えはできませんが、質問記載用に書いたとき間違えて実際のスクリプトが正ならばすみません、わからないです。

この回答への補足

purple_cubさん
お世話になっております。
ありがとうございます。
ご返信が大変遅れまして、申し訳ありません。

ERRORLEVELについて、ご指摘の点を試してみました。
下記、IF構文を使いました。
if %errorlevel% GEQ 1 (goto tran1) ELSE goto tran2
しかし、やはり、正しく動きませんでした。
他の箇所の構文がちがっているかもしれません。

少し、別の動きを考えました。
Path環境変数をログに落として、ログから検索して変更する動きしました。結果、何とかできました。

set tran=C:\temp\tran.log
set navnt=C:\Program Files\navnt

%path%>%tran%
findstr /i /c:"%navnt%" %tran%
if %errorlevel% GEQ 1 (goto tran1) ELSE goto tran2

:tran1
for /f "delims=," %%i in (C:\temp\tran.log) do set ChegPath=%%i
set NewChag=%ChegPath%;C:\Program Files\navnt
echo %NewChag%
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

色々、試行錯誤して試さないとだめですね。
目的の動きは、できたので終了いたします。
ありがとうございました。

補足日時:2009/01/28 10:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!