标题: [注册表类] 【已解决】批处理如何判断某个注册表项下面是不是空的,然后执行一些东西 [打印本页]
作者: solan 时间: 2015-10-10 12:55 标题: 【已解决】批处理如何判断某个注册表项下面是不是空的,然后执行一些东西
本帖最后由 solan 于 2015-10-30 20:03 编辑
- @echo off
- reg query "HKEY_CURRENT_USER\Software\Unigraphics Solutions\NX" /v
- if errorlevel 1 (
- tasklist | find "ugslmd.exe"
- if not errorlevel 1 (goto x1) else (goto x2)
- )else goto exit
- :x1
- ..........
- :x2
- .........
复制代码
这是我写的代码,但是不成功。我先说明一下,注册表项NX下面有好多个子项比如8.5、A、B等等,
当我卸载了8.5、A和B等等软件后NX下面空了,批处理怎么判断呢,如果空了就执行x1或x2卸载共用的文件;如果不空,哪怕还有一个子项就退出exit
麻烦老师指点一二
作者: DAIC 时间: 2015-10-10 13:22
空和非空这两种情况下分别执行 reg query "HKEY_CURRENT_USER\Software\Unigraphics Solutions\NX" /v
根据返回结果的不同来判断
不要根据 errorlevel 来判断
作者: solan 时间: 2015-10-10 13:57
回复 2# DAIC
执行代码- @echo off
- reg query "HKEY_CURRENT_USER\Software\Unigraphics Solutions\NX"
- pause
复制代码
如果不空时,执行结果如下:
如果空,执行结果如下:
请问下面的代码怎么写,谢谢
作者: solan 时间: 2015-10-10 15:05
我学得还不行啊,求大神帮忙写一下,拜托啦
作者: solan 时间: 2015-10-10 16:25
我写成这样也不行- @echo off
- for /f "tokens=2" %%a in ('reg query "HKEY_CURRENT_USER\Software\Unigraphics Solutions\NX"') do set /a n=%%a
- if %n%=0 (goto exit) else (
- tasklist | find "ugslmd.exe
- if not errorlevel 1 (goto x1) else (goto x2)
- )
- :x1
- .....
- :x2
- .....
复制代码
作者: solan 时间: 2015-10-10 16:27
祈求大神出现,一举成功
作者: solan 时间: 2015-10-10 16:38
NX下面有子项时,执行下面代码- @echo off
- reg query "HKEY_CURRENT_USER\Software\Unigraphics Solutions\NX"
- pause
复制代码
结果是
执行下面代码- @echo off
- for /f "tokens=2" %%a in ('reg query "HKEY_CURRENT_USER\Software\Unigraphics Solutions\NX"') do set /a n=%%a
- echo %n%
- pause
复制代码
结果是
作者: DAIC 时间: 2015-10-10 16:55
回复 3# solan - @echo off
- reg query "HKEY_CURRENT_USER\Software\Unigraphics Solutions\NX" | findstr "HKEY"
- if errorlevel 1 (
- goto :end
- ) else (
- tasklist | findstr "ugslmd.exe" && goto :x1 || goto x2
- )
-
- :x1
- echo x1
- goto :end
-
- :x2
- echo x2
- goto :end
-
- :end
- pause
复制代码
作者: /zhqsystem/zhq 时间: 2015-10-10 21:41
这个位置非卸载位置,自行查询卸载注册表详细路径
作者: solan 时间: 2015-10-11 08:44
本帖最后由 solan 于 2015-10-30 20:03 编辑
[attach]9186[/attach]回复 9# /zhqsystem/zhq
这个我知道,但是这个是准对某系列软件的某个版本,卸载软件我已经写好代码了。
[attach]9186[/attach]
我这个软件有多种版本,允许多版本共存。都在Unigraphics Solutions下面的NX里面,比如A、B、9.0或其他的,Unigraphics Solutions下面还有一个子项Running Applications,这是原版软件这样的(以后他们的新版软件我估计也是这样),我刚好想利用这个特点,来判断NX下面还有没有子项,如果还有就不动而退出,如果没有就删除多版本共用的所有文件。
作者: solan 时间: 2015-10-11 08:51
我制作的是精简版,用inno打包的,由于inno的技术含量相对比较高,想完全靠inno的脚本来达到上述的功能,我目前还做不到,所以想借助批处理来解决
作者: solan 时间: 2015-10-11 09:06
8楼的代码有部分写错了,我改过来后,加上我的后续代码还是不能通过,也就是达不到我上面说的要求
作者: solan 时间: 2015-10-11 09:07
希望版主在百忙之中帮我看看,多谢了
作者: solan 时间: 2015-10-11 09:20
本帖最后由 solan 于 2015-10-30 19:59 编辑
@echo off
reg query "HKEY_CURRENT_USER\Software\Unigraphics Solutions\NX" | findstr "HKEY"
if errorlevel 1 (
goto exit
) else (
tasklist | findstr "ugslmd.exe" && goto x1 || goto x2
)
:x1
........
goto x2
:x2
........
exit[/code]
作者: pcl_test 时间: 2015-10-11 17:51
现在还达不到10楼所说的要求,我贴上更改后的详细代码,请版主帮我再更改一下
solan 发表于 2015-10-11 09:20
倒是要说清楚还有哪些地方没有达到要求?
作者: /zhqsystem/zhq 时间: 2015-10-11 21:32
回复 10# solan
请提供注册表reg文件供参考
作者: solan 时间: 2015-10-12 07:34
附件
作者: solan 时间: 2015-10-12 08:18
回复 15# pcl_test
就是删除不了多版本共用的所有文件和相应的注册表,比如:没有删除nx_flex文件夹、没有删除Unigraphics Solutions这个项。。。。。也就是x1和x2好像没执行,这个批处理执行时一甩而过,我猜这部分代码肯定有问题- @echo off
- reg query "HKEY_CURRENT_USER\Software\Unigraphics Solutions\NX" | findstr "HKEY"
- if errorlevel 1 (
- goto exit
- ) else (
- tasklist | findstr "ugslmd.exe" && goto x1 || goto x2
- )
复制代码
用其他的代码,也是如此- @echo off
- reg query "HKEY_CURRENT_USER\Software\Unigraphics Solutions\NX"
- if errorlevel 1 (
- tasklist | find "ugslmd.exe"
- if not errorlevel 1 (goto x1) else (goto x2)
- )else goto exit
复制代码
- @echo off
- for /f "tokens=2" %%a in ('reg query "HKEY_CURRENT_USER\Software\Unigraphics Solutions\NX"') do set /a n=%%a
- if %n%=0 (goto exit) else (
- tasklist | find "ugslmd.exe
- if not errorlevel 1 (goto x1) else (goto x2)
- )
复制代码
所以我不知道该怎么写了,x1、x2我一直没改,就是10楼的x1、x2
作者: pcl_test 时间: 2015-10-12 09:39
回复 18# solan
goto exit是什么?仔细参看8楼DAIC的代码,要么直接exit
作者: /zhqsystem/zhq 时间: 2015-10-12 14:10
本帖最后由 /zhqsystem/zhq 于 2015-10-12 14:18 编辑
回复 17# solan
没有一个我要的数据,暂时先用这个判断吧
-
- @echo off
- set "reg_key=HKEY_CURRENT_USER\Software\Unigraphics Solutions"
- set "n=0"
- for /f "delims=" %%i in ('reg query "%reg_key%" /s') do set/a n+=1
- if %n% geq 1 echo 注册表有多个项或值
- if %n% lss 1 echo 注册表错误或无数据
- pause
复制代码
作者: solan 时间: 2015-10-13 13:03
回复 20# /zhqsystem/zhq
谢谢回复,你的代码经过测试是正确的,但是怎么让你的代码来执行10楼的x1和x2呢?
作者: /zhqsystem/zhq 时间: 2015-10-13 20:50
回复 21# solan
当注册表有值时继续reg query来查询相应的值,reg query "......" >nul 2>nul&&((有执行)||(没有执行))
作者: solan 时间: 2015-10-29 08:17
重新安装系统后,再执行下面代码测试通过- @echo off
- color 1e
- reg query "HKEY_CURRENT_USER\Software\Unigraphics Solutions\NX" | findstr "HKEY"
- if errorlevel 1 (
- tasklist | findstr "ugslmd.exe" && goto x1 || goto x2
- ) else (
- goto:eof
- )
- :x1
- .......
- goto x2
-
- :x2
- ....
复制代码
作者: terse 时间: 2015-10-29 12:44
本帖最后由 terse 于 2015-10-29 12:46 编辑
- reg query "HKEY_CURRENT_USER\Software\Unigraphics Solutions\NX" 2>nul | findstr . && goto end ||(
- tasklist | findstr /ib ugslmd\.exe && goto x1|| goto :x2
- )
复制代码
作者: solan 时间: 2015-10-30 15:09
回复 24# terse
不得不承认,您的代码更漂亮,哦,当然测试也通过啦,谢谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |