
バッチでのレジストリ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へ飛ぶ処理の記述をご教授頂けますか?
宜しくお願い致します。
No.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
色々、試行錯誤して試さないとだめですね。
目的の動きは、できたので終了いたします。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Windows 10 pathが通らない 2 2023/03/27 11:28
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドの結果を変数に入れたい
-
バッチファイルを実行後、終了...
-
DOSコマンドのforで空白行をス...
-
batファイルを実行してコマンド...
-
DHCP設定バッチnetshコマンドに...
-
WinSCPがタスクスケジューラで...
-
oracleのimp-00002エラーについて
-
Windows10のタスクスケジューラ...
-
bat実行中に引数1の内容を変更...
-
バッチファイルを常に管理者権...
-
バッチプログラムについて(編...
-
実行結果を戻り値で取得したい
-
バッチファイルでPC情報を取得する
-
ネットワークドライブを見るバ...
-
WindowsのRANDOM関数を用いたバ...
-
コマンドプロンプトで最新のフ...
-
バッチ実行を意図的に失敗させ...
-
操作可能なプログラムまたはバ...
-
バッチ実行時にバッチのファイ...
-
ログオフ時にファイルを実行に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10のタスクスケジューラ...
-
リモートデスクトップの取り合...
-
バッチファイルを実行後、終了...
-
batファイルで、call使っても戻...
-
バッチ実行を意図的に失敗させ...
-
oracleのimp-00002エラーについて
-
コマンドの結果を変数に入れたい
-
DHCP設定バッチnetshコマンドに...
-
DOSコマンドのforで空白行をス...
-
バッチファイルでPC情報を取得する
-
batファイルを実行してコマンド...
-
バッチでEnterを認識させ...
-
バッチファイルを常に管理者権...
-
WMICでリモートでバッチが実行...
-
コマンドプロンプトで最新のフ...
-
バッチ実行時にバッチのファイ...
-
バッチプログラムについて(編...
-
bat実行中に引数1の内容を変更...
-
ログオンユーザを簡単に切り替え
-
実行結果を戻り値で取得したい
おすすめ情報