batch script help, find, replace registry keys

1

I'm trying to figure out why my reg import command is not working in the script below. When I run the reg import fileName.reg from the DOS it works fine but when included in the script below it does nothing and I cannot find why. I can see the export completed correctly and the format looks ok to me. When I use the the reg import command on the same exported file it works fine. Below is the code.

@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

powerhouse

Posted 2013-01-23T08:21:27.753

Reputation: 11

Manually importing origReg.txt (which you just exported) is fine, but is newkeys.reg being created properly? Can you import that from the command line? Also, any errors? – Karan – 2013-01-23T17:30:56.030

Yes, I'm able to import the new created file(newkey.reg) manually without issue from command line. To test, simple comment out del /q newkeys.reg origReg.txt and the file would be left undeleted for you to import manually. – powerhouse – 2013-01-24T18:26:51.607

Weird. And there's no error at all? – Karan – 2013-01-24T18:31:26.080

This is a sample output I get when I run it:

"Updating registry values, please wait..." The operation completed successfully. The operation completed successfully. The syntax of the command is incorrect.

As you see the last line complains about another command but not sure why it's trying to run another one.....this happens when I run it using just one registry path.

With one it seems to work properly, even with that last error massage there.

i'm playing with pausing "ping 1.1.1.1 -n 5 > null" to see maybe it's doing too fast that it fails. – powerhouse – 2013-01-24T19:01:06.963

Answers

0

By adding in

ping 1.1.1.1 -n 5 > null

I was able to pause a bit while the file is being written to disk.....this solved my problem

powerhouse

Posted 2013-01-23T08:21:27.753

Reputation: 11