Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如果应用程序未安装,如何检查是否存在可执行文件并运行安装程序?_Batch File_Windows Installer - Fatal编程技术网

Batch file 如果应用程序未安装,如何检查是否存在可执行文件并运行安装程序?

Batch file 如果应用程序未安装,如何检查是否存在可执行文件并运行安装程序?,batch-file,windows-installer,Batch File,Windows Installer,我是没有SCCM的服务器/客户机环境的系统管理员,我想使用批处理文件检查组织中的计算机是否有文件名 我希望脚本检查文件egui.exe是否位于以下目录之一: Program Files\ESET\ESET Security\ Program Files (86)\ESET\ESET Security\ 如果文件存在,则脚本应不执行任何操作 如果文件不存在,则应在安静模式下从我的服务器启动Eset端点安装: msiexec /i myserver\eea_nt64_enu.msi /qb 我

我是没有SCCM的服务器/客户机环境的系统管理员,我想使用批处理文件检查组织中的计算机是否有文件名

我希望脚本检查文件
egui.exe
是否位于以下目录之一:

Program Files\ESET\ESET Security\
Program Files (86)\ESET\ESET Security\
如果文件存在,则脚本应不执行任何操作
如果文件不存在,则应在安静模式下从我的服务器启动Eset端点安装

msiexec /i myserver\eea_nt64_enu.msi /qb 
我写了一些东西,但我不确定它是否正确和完整:

If exist "C:\program files\ESET\ESET Security\egui.exe" echo ?
else 
call msiexec /i myserver\eea_nt64_enu.msi /qb
同样,如果文件存在,我不希望脚本加载安装。 如果该文件夹中存在可执行文件,则批处理文件不应执行任何操作

如何检查程序文件和程序文件(x86)中是否存在可执行文件

如何检查每个版本的版本


如果防病毒软件的版本是旧的(比如说版本4),那么它应该强制安装并覆盖当前版本?

我想您已经验证了所讨论的MSI本身并没有解决这个“问题”?它可能有必要的逻辑来清理内置的旧版本,这样您就不需要检查任何前置条件了

我看到您已经得到了一个批处理答案(
如果不存在
),但我想补充一点,您可以使用传统的活动脚本(
VBScript
Javascript
-我看到您可能是一个Javascript人),或者更现代的
Powershell
脚本(我不怎么使用)


我们可以问一下您是如何调用安装的吗?通过登录脚本、计划任务、AD或其他机制?

打开命令提示窗口,然后运行
if/?
goto/?
以了解以下批处理文件:

@echo off

rem This first file existence check works on 32-bit and
rem 64-bit Windows in 32-bit and 64-bit environment.
if exist "%ProgramFiles%\ESET\ESET Security\egui.exe" goto :EOF

rem On 64-bit Windows run also a file existence check for 32-bit version
rem of application in standard program files folder for x86 applications.
if not "%ProgramFiles(x86)%" == "" if exist "%ProgramFiles(x86)%\ESET\ESET Security\egui.exe" goto :EOF

rem If this batch file is executed by 32-bit cmd.exe on 64-bit Windows
rem there is still not checked if 64-bit version of application exists
rem in standard program files folder for x64 applications.
if not "%ProgramW6432%" == "" if exist "%ProgramW6432%\ESET\ESET Security\egui.exe" goto :EOF

rem Other commands to install the application depending on Windows architecture.
阅读Microsoft文章,了解所有这些条件的原因

但我认为最好是通过查询安装了Microsoft安装程序包的该应用程序的注册表项来检查是否存在
egui.exe

@echo off
%SystemRoot%\System32\reg.exe QUERY "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\egui.exe" >nul 2>&1
if not errorlevel 1 goto :EOF

rem Other commands to install the application depending on Windows architecture.
REG如果指定的注册表项不存在,则以值
1
退出,如果成功查询此注册表项,则以值
0
退出

if not error level 1
表示先前执行的命令/应用程序的退出代码不大于或等于
1
,这意味着低于
1
,这意味着几乎所有命令和应用程序都相等

我没有安装ESET安全软件包,因此不知道是否根据Microsoft Windows应用程序注册指南注册了
egui.exe
(或此软件包中的任何其他可执行文件)

要了解所有使用的命令及其工作方式,请打开命令提示窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • echo/?
  • goto/?
  • 如果/?
  • reg/?
  • reg query/?
  • rem/?

我打赌,如果您阅读if命令的帮助文件,您将看到使用ELSE的正确语法。嗯,我找不到它。此外,如果文件存在,则无法找到如何使其不执行任何操作。@StackBuck,查找特定命令的帮助并不困难,打开命令提示符,
cmd.exe
,然后键入窗口
command/?
,然后按enter键。在这种情况下,您需要键入
if/?
以获取有关
if
命令的信息。确定。如果文件存在,我如何使脚本“不做任何事情”?如果不存在,为什么不使用?我对Powershell脚本有点了解,但对于你的问题,我计划通过登录脚本来实现。好的,Powershell不是我的拿手好戏,但这里有一个很好的来源:(你可能知道)。如果您还没有,可以直接在系统上使用预先存在的文件运行安装程序,看看会发生什么。你可能已经这么做了。