gpt4 book ai didi

batch-file - 从批处理文件中找到已安装程序的版本

转载 作者:行者123 更新时间:2023-12-02 17:59:27 25 4
gpt4 key购买 nike

作为开发人员设置的一部分,我们有一个批处理文件,该文件安装了多个程序。当我们获得使用过的组件的新版本时,将定期运行该程序。因此,仅当版本不同时才进行安装才是不错的选择。

在命令提示符下,我可以运行此命令并获取安装的版本:

wmic datafile where name='C:\\Program Files (x86)\\Common Files\\Company\\Product\\Version12\\Product.exe' get version /format:list

给出输出 Version=12.1.369.0

但是,当我将其放入这样的批处理文件中并尝试提取版本时:
echo off
FOR /F "tokens=2 delims==" %%I in ('"wmic datafile where^(name^="C:\\Program Files (x86)\\Common Files\\Company\\Product\\Version12\\Product.exe" get version /format:list"') DO (SET "RESULT=%%I")
ECHO %RESULT%

我得到响应 \\Common was unexpected at this time.
有些部分可能是多余的,因为我一直在尝试从'Net上进行修改。

我错过了什么?

最佳答案

您有一组放错位置的双引号以及一个额外的(

WMIC使用SQL语法,并且字符串用单引号引起来。内部的单引号不会干扰将单引号引起来的命令。

您可以在WHERE子句周围添加双引号(不包括WHERE关键字),以避免FOR DO()子句中出现一些转义问题。

@echo off
FOR /F "tokens=2 delims==" %%I IN (
'wmic datafile where "name='C:\\Program Files (x86)\\Common Files\\Company\\Product\\Version12\\Product.exe'" get version /format:list'
) DO SET "RESULT=%%I"
ECHO %RESULT%

但这可能不是全部解决方案。在上面的代码中看不到它,但是RESULT实际上包含尾随回车(0x0D)。这是由于对FOR/F如何处理WMIC unicode输出的古怪之处。 WMIC输出的每一行都会有额外的尾随回车符。

只要您始终使用 %RESULT%(正常扩展名)访问RESULT,那么您就不会有任何问题。但是,如果您需要延迟扩展,则可能会遇到问题,如下所示。
@echo off
setlocal enableDelayedExpansion
FOR /F "tokens=2 delims==" %%I IN (
'wmic datafile where "name='C:\\Program Files (x86)\\Common Files\\Company\\Product\\Version12\\Product.exe'" get version /format:list'
) DO SET "RESULT=%%I"
ECHO %RESULT%xxx
ECHO !RESULT!xxx

剥离不想要的回车符的一种便捷方法是使用额外级别的FOR。
@echo off
setlocal enableDelayedExpansion
FOR /F "tokens=2 delims==" %%I IN (
'wmic datafile where "name='C:\\Program Files (x86)\\Common Files\\Company\\Product\\Version12\\Product.exe'" get version /format:list'
) DO FOR /F "delims=" %%A IN ("%%I") DO SET "RESULT=%%A"
ECHO %RESULT%xxx
ECHO !RESULT!xxx

关于batch-file - 从批处理文件中找到已安装程序的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25162348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com