【发布时间】:2018-08-09 22:58:15
【问题描述】:
我编写了一个批处理文件来卸载有故障的 WiFi 驱动程序(英特尔 ProSet 无线)并在笔记本电脑上设置适当的无线配置文件。此脚本旨在通过 Symantec Management Agent 远程运行。
代码首先运行组策略更新以下拉适当的 来自服务器的网络证书。然后代码检查是否安装了 WiFi 驱动程序。如果是,则脚本将其卸载。之后,无论哪种情况,它都会擦除当前的无线配置文件并调用另一个批处理文件来安装相应的无线配置文件。
我的问题是,当我运行脚本时,控制台会报告“系统无法打开指定的设备或文件”。软件卸载后将终止。 IF EXIST 语句检查是否存在软件文件之一。
通常,我可以再次运行相同的脚本,不会遇到 IF EXIST 的情况,因此批处理文件的其余部分将正常工作。
我在下面附上了我的代码——我是否正确使用了 IF EXIST?
gpupdate /force
IF EXIST "C:\ProgramData\Package Cache\{552523b2-40ad-46b3-94f6-2b99d0860d5c}\setup.exe" (
cd "C:\ProgramData\Package Cache\{552523b2-40ad-46b3-94f6-2b99d0860d5c}\"
start /wait setup.exe /uninstall
)
TIMEOUT /T 3 /nobreak >nul
netsh wlan delete profile name=*
cd "C:\Wireless_Settings\"
Mobile_Devices_profile.bat
我研究了其他帖子,并且我相信我正确使用了该条件。我没有看到任何其他与我的情况相符的帖子。它总是正确检查是否满足条件,但是我不明白为什么在卸载软件后程序终止。我认为应该发生的就是不再满足这种情况,所以脚本继续。
【问题讨论】:
-
“系统无法打开指定的设备或文件。”错误似乎与
.MSI/setup安装过程有关(谷歌建议例如暂停杀毒等.) stackoverflow.com/questions/32727996 -
我同意@JosefZ,当我检查这些文件夹路径中是否存在文件时,我没有收到该消息。
-
包缓存目录通常在卸载包时也会被删除。因此,将此目录设置为活动目录并不好。我建议将整个 IF 条件更改为:
if exist "C:\ProgramData\Package Cache\{552523b2-40ad-46b3-94f6-2b99d0860d5c}\setup.exe" start "" /wait /D%SystemRoot%\System32 "C:\ProgramData\Package Cache\{552523b2-40ad-46b3-94f6-2b99d0860d5c}\setup.exe" /uninstall.
标签: windows batch-file file-exists