0

以下のスクリプトで reg import コマンドが機能しない理由を理解しようとしています。DOS から reg import fileName.reg を実行すると正常に動作しますが、以下のスクリプトに含まれていると何も実行されず、理由がわかりません。エクスポートが正しく完了したことを確認でき、フォーマットは問題ないように見えます。同じエクスポートされたファイルで reg import コマンドを使用すると、正常に動作します。以下はコードです。

どうも......

@echo off
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
REM  This script updates the Windows Registry for the 

REM update Admin Nodes
set service1Key=HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\MyService1\Parameters
set service2Key=HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\MyService2\Parameters

echo updating [%service1Key%]
call :updateRegKeys %service1Key%
echo updating [%service2Key%]
call :updateRegKeys %service2Key%

SET count=3
set looper=1

FOR /L %%A IN (1,1,%count%) DO (call :updateAllServers %%A)
GOTO:EOF

:updateAllServers
SET domainKey=HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\MyDomain%looper%\Parameters
SET otherDomainKey=HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\MyOtherDomain%looper%\Parameters
echo [%domainKey%]
echo [%otherDomainKey%]
echo .
call :updateRegKeys %domainKey%
call :updateRegKeys %otherDomainKey%
set /a looper+=1
goto:eof

:updateRegKeys
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
set "registrykey=%1"
set findv="-Xms512m"
set replacev="-Xms512m something that is long"
echo "Updating registry values, please wait..."
REG EXPORT "%registrykey%" origReg.txt
call :findReplace %findv% %replacev% origReg.txt > newkeys.reg
reg import newkeys.reg
del /q newkeys.reg origReg.txt

:findReplace
REM finds and replaces a string 
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
set "line=%%B"
if defined line (
    call set "line=echo.%%line:%~1=%~2%%"
    for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
) ELSE echo.
)

goto:eof

4

1 に答える 1

0

*.reg スクリプト内のすべてのバックスラッシュを「エスケープ」する必要があります。たとえば、(「\\」に注意してください):

[HKEY_CURRENT_USER\Environment]
"LIB_DIR"="C:\\Libraries"

そうしないと機能せず、その理由がまったくわかりません (エラーは発生せず、警告だけで何も起こりません)。私はしばらく前にこの問題を抱えていました。

それが役立つことを願っています。

于 2013-01-18T04:41:48.133 に答える