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



我对批处理脚本并不陌生,并且已经为各种其他事情做了少量脚本,但是这个脚本难倒了我。

我实际上是从其他地方借鉴的这个想法,因为我还没有深入研究for命令。

我想用这个脚本做的是搜索HKU rootkey内的每个子键以获得特定的子键路径。如果该子键路径存在,它将修改该子键路径中的一个键值。但它似乎总是失败,没有错误。

这是我现在的记录:

for /f %%a in ('reg query hku') do call :loop1 %%a
goto :end
:loop1
for /f %1 in (reg query %1softwaremicrosoftdynamics) do call :loop2 %%b
goto :end
:loop2
if Errorlevel 1 goto :error
reg add %16.0configuration /v configurationfile /t reg_sz /d  /f
goto :end
:error
echo Error has occurrd.
goto :end
:end
Pause

当我运行这个批处理时,我得到以下结果:

c:Users-username-Desktoptest>for /F %a in ('reg query hku') do call :loop1 %a
c:Users-username-Desktoptest>call :loop1 HKEY_USERS.DEFAULT
c:Users-username-Desktoptest>for /f HKEY_USERS.DEFAULT in (reg query HKEY_USER
S.DEFAULTsoftwaremicrosoftdynamics) do call :loop2 %b
c:Users-username-Desktoptest>

它好像停止运行了?当我检查错误级别后,它运行它返回"0",所以我想我至少会看到错误消息出现?

我只是随便看看,是不是漏掉了一些小东西?

先运行下面的命令,看看返回的结果是否对你有帮助:

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

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

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

for /f %%a in ('reg query hku') do call :loop1 "%%a"
pause
goto :eof
:loop1
for /f "%~1" in (reg query "%~1softwaremicrosoftdynamics") do call :loop2 "%%b"
goto :eof
:loop2
if Errorlevel 1 echo Error has occurred. & pause & exit /B 1
reg add "%~16.0configuration /v configurationfile" /t reg_sz /d  /f
goto :eof

我发现了这个bug。是两个地方。guggiesberg,你说得对。我需要EOF。正如foxidrive所指出的,"loop1"的第一行有一些语法问题。我把自己弄糊涂了。

替换:

for /f %1 in ('reg query %1softwaremicrosoftdynamics') do call :loop2 %%b

:

for /f %%b in ('reg query %1softwaremicrosoftdynamics') do call :loop2 %%b

现在工作正常。谢谢你的指点!

最新更新