批处理文件的问题,以搜索注册表和编辑

时间:2014-06-02 19:33:44

标签: batch-file scripting registry

我对批处理脚本并不是那么新,并为各种其他事情做了少量脚本,但是这个脚本让我很难过。

我实际上是从其他地方提出这个想法,因为我还没有深入到for命令中。

我尝试使用此脚本尝试搜索HKU rootkey中的每个子项以获取特定的子键路径。如果该子键路径存在,则它将修改该子键路径中的键值。但它似乎一直没有错误而失败。

这就是我现在所拥有的:

for /f %%a in ('reg query hku') do call :loop1 %%a
goto :end

:loop1
for /f %1 in (reg query %1\software\microsoft\dynamics) do call :loop2 %%b
goto :end

:loop2
if Errorlevel 1 goto :error
reg add %1\6.0\configuration /v configurationfile /t reg_sz /d \ /f
goto :end

:error
echo Error has occurrd.
goto :end

:end
Pause

当我运行此批处理时,我得到以下内容。

c:\Users\-username-\Desktop\test>for /F %a in ('reg query hku') do call :loop1 %a

c:\Users\-username-\Desktop\test>call :loop1 HKEY_USERS\.DEFAULT

c:\Users\-username-\Desktop\test>for /f HKEY_USERS\.DEFAULT in (reg query HKEY_USER
S\.DEFAULT\software\microsoft\dynamics) do call :loop2 %b

c:\Users\-username-\Desktop\test>

好像它只是停止运行?当我在运行后检查错误级别时返回" 0"所以我认为我至少看到错误信息出现了吗?

我错过了一些小事我只是在看?

3 个答案:

答案 0 :(得分:0)

你需要GOTO:eof从子程序返回。

for /f %%a in ('reg query hku') do call :loop1 "%%a"
pause
goto :eof

:loop1
for /f "%~1" in (reg query "%~1\software\microsoft\dynamics") do call :loop2 "%%b"
goto :eof

:loop2
if Errorlevel 1 echo Error has occurred. & pause & exit /B 1
reg add "%~1\6.0\configuration /v configurationfile" /t reg_sz /d \ /f
goto :eof

答案 1 :(得分:0)

运行此操作以开始 - 查看它返回的内容是否对您有帮助:

这可能需要更高版本的Windows - 我不确定早期窗口的reg查询选项。

@echo off
for /f "delims=" %%a in ('reg query hku /s /f data /k ^| find /i "\software\microsoft\dynamics" ') do echo "%%a"

答案 2 :(得分:0)

我发现了这个错误。这是两个地方。 RGuggiesberg,你是对的。我在那里需要EOF。正如foxidrive指出的那样,“loop1”的第一行有一些语法问题。我很困惑自己。

替换:

for /f %1 in ('reg query %1\software\microsoft\dynamics') do call :loop2 %%b

使用:

for /f %%b in ('reg query %1\software\microsoft\dynamics') do call :loop2 %%b

现在它工作正常。感谢指点!