1

基本的に私がやろうとしているのは、ある変数を別の変数で更新するスクリプトを作成することです。

私はすでにすべてのスクリプトを作成しているので、レジストリから新しいデータを取得して設定します。今では、古い変数を更新するために必要です。

スクリプト例

set current_shockwave_version=1
set current_flash_version=1

FOR /F "tokens=2* delims=    " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayer" /v CurrentVersion ') DO SET Installed_Flash_Version=%%B
FOR /F "tokens=2* delims=    " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Shockwave 11\currentupdateversion" ') DO SET Installed_Shockwave_Version=%%B

ここで、current_shockwave_versionとcurrent_flash_versionの値を、レジストリから取得した変数に置き換えたいと思います。このスクリプトを使用している管理者がたくさんいて、簡単な更新機能を追加しようとしているので、完全に更新されたコンピューターでこの置換機能を実行できます。

4

1 に答える 1

0

どのような結果が必要かは明確ではありませんが、レジストリ値を1回だけ読み取り、次に行を更新するだけでよいと思います。

set current_shockwave_version=1
set current_flash_version=1

新しい値で。
最も簡単な方法は、2行をconfig.batファイルに移動することです。その後、次のようなものを使用できます。

call config.bat
echo current_flash_version = %current_flash_version%

:UpdateValues
FOR /F "tokens=2*" %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayer" /v CurrentVersion ') DO SET Installed_Flash_Version=%%B
FOR /F "tokens=2*" %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Shockwave 11\currentupdateversion" ') DO SET Installed_Shockwave_Version=%%B
(
  echo set current_shockwave_version=%Installed_Shockwave_Version%
  echo set current_flash_version=%Installed_Flash_Version%
) > config.bat

編集:同じバッチファイルで置き換えるというコメントへ同じバッチファイル
で値を置き換えることはお勧めできません。これを行うには、実行中にバッチを書き直す必要があります。
これは可能ですが、特に値の長さが同じでない場合は注意が必要です。バッチは少し信頼性が低くなります。

データベース値の設定をファイルの最後に移動すると解決できますが、IMOは現在実行中のバッチを変更することをお勧めしません。

@echo off
call :setValues
echo current_flash_version = %current_flash_version%
call :UpdateValues
echo new current_flash_version = %current_flash_version%
exit /b

:UpdateValues
FOR /F "tokens=2* delims=    " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayer" /v CurrentVersion ') DO SET Installed_Flash_Version=%%B
FOR /F "tokens=2* delims=    " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Shockwave 11\currentupdateversion" ') DO SET Installed_Shockwave_Version=%%B
REM ** Copy and modify the own batch
findstr /v /r "##DB##$" "%~f0" > "%~f0.tmp"
(
  (echo set "current_shockwave_version=%Installed_Shockwave_Version%" ^& REM ##DB##)
  (echo set "current_flash_version=%Installed_Flash_Version%" ^& REM ##DB##)
) >> "%~f0.tmp"
(
  copy "%~f0.tmp" "%~f0"
  del "%~f0.tmp"
)
call :setValues
exit /b

:setValues
set "current_shockwave_version=1" & REM ##DB##
set "current_flash_version=1" & REM ##DB##
于 2012-06-12T11:30:31.600 に答える