中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎样判断机器里是否已经安装了某个软件?
作者:
标题: 怎样判断机器里是否已经安装了某个软件? 上一主题 | 下一主题
numen
初级用户





积分 46
发帖 13
注册 2006-6-30
状态 离线
『楼 主』:  怎样判断机器里是否已经安装了某个软件?

大家好:
(在实践中学习真是一种乐趣.  感言)
    个人做了一个小程序A,但需要另一个软件B的配合才行. 程序A和B都放在u盘里.
    所谓的配合就是指B程序只需在一台机器上安装一次即可,下次启用A程序时就不再需再安装B了.(机器环境为win..系统.)
    现在的想法就是:一个批处理首先先判断一下机器中B软件安装了没有,安装了则调用程序A,若没有则安装B,然后再调用A.(一般情况下第一次使用大多都是要安装B的)
    曾经想过在u盘中作个文件,其实就是起标识符的作用:安装了B后就创建一个文件.然后每次启动批处理,就以这个文件存不存在作为判断的依据.但是在换了一台机器使用的情况下,就会出现误判断.
    谢谢大家.!
    请多指教.

2006-7-18 15:13
查看资料  发短消息 网志  OICQ (26641748)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

  请问B程序是强制安装在固定位置吗?如果是这样的话,那就好办得多;如果是可以指定任意位置,则会耗费大量的搜索时间。

  假设是在固定位置:
@echo off
if exist "位置\程序B" "位置\程序A" else "位置\程序B的安装程序.exe" && goto continue
exit

:continue
echo  如果程序B已经安装完毕,请按任意键调用程序A
pause
"位置\程序A"
  假设程序B安装在可选位置:
@echo off
:: 此代码会耗费大量时间,请耐心等待
setlocal enabledelayedexpansion
set exclude=
set /p exclude=请输入U盘所在位置的盘符字母:
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
if exist %%a:\nul (
    if "%%a"=="!exclude!" "位置\程序B的安装程序.exe" && goto continue
    for /f "delims=" %%A in ('dir /a /s /b %%a:\ 程序B') do if exist "位置\程序B" "位置\程序A" else "位置\程序B的安装程序.exe" && goto continue
    )
)
exit

:continue
echo  如果程序B已经安装完毕,请按任意键调用程序A
pause
"位置\程序A"
[ Last edited by namejm on 2006-7-19 at 13:25 ]

2006-7-18 18:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
numen
初级用户





积分 46
发帖 13
注册 2006-6-30
状态 离线
『第 3 楼』:  

我的神啊~~真牛

苦学中...谢谢

2006-7-19 09:21
查看资料  发短消息 网志  OICQ (26641748)  编辑帖子  回复  引用回复
numen
初级用户





积分 46
发帖 13
注册 2006-6-30
状态 离线
『第 4 楼』:  

还好是固定位置...:lol:

2006-7-19 09:41
查看资料  发短消息 网志  OICQ (26641748)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 5 楼』:  

  今天发现2楼的第二个代码有一处错误,将导致代码出错,具体是set enabledelayedexpansion这一句中,误把setlocal写成了set了,现已经更正,请重新测试。

2006-7-19 13:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 6 楼』:  

Re namejm:

      其实标记不一定要在安装文件夹下的,可以在注册表的固定键值下,也可以在应用软件的共享目录下(比如CommonProgramFiles),这样判定起来会简单的多。如果想增加这种方法的安全性,可以将标记设定为一个指出程序安装路径和安装文件的数据或程序文件,以方便进行本地化的存在性判定。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-7-19 13:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 7 楼』:  

Re willsort:

  好久不见老大现身了:)

  是不是所有安装好的程序都会出现在注册表的固定位置或者是应用软件的共享目录下?对注册表和应用程序的共享目录不是很熟悉,请老大详细说明一下。

2006-7-19 14:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 8 楼』:  

利用注册表判断是否安装谷歌工具条2例
@echo off
reg query "HKLM\SOFTWARE\google">nul
if not errorlevel 1 echo 你的电脑上已经安装谷歌工具条!
if errorlevel 1 echo 你的电脑上没有安装谷歌工具条?
PAUSE >NUL
或者:
@echo off
reg query "HKLM\SOFTWARE"|find /i "google"
if not errorlevel 1 echo 你的电脑上已经安装谷歌工具条!
if errorlevel 1 echo 你的电脑上没有安装谷歌工具条?
PAUSE >NUL


2006-7-19 16:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: