簡體   English   中英

在批處理文件的for循環中使用wmic命令中的變量

[英]Use variable in wmic command inside for loop in Batch file

我無法讓這個查詢工作:

set APPNAME="App Name"

for /f "skip=1delims= " %%t in ('wmic product where "name=%APPNAME%" get IdentifyingNumber') do set "guid=%%t"& goto printguid
:printguid
    echo %guid%

我收到“無效的別名動詞”錯誤。 我無法弄清楚我錯過了什么。

關於WMIC的備注:別忘了WMIC的output是unicode!

可以通過另一個FOR /F循環傳遞值來刪除尾隨<CR> 這也刪除了幻影“空白”行(實際上是<CR>

所以我用"APPNAME=VirtualDJ 8"在我這邊測試了這批,它可以工作 5/5

@echo off
Title Get IdentifyingNumber from Application using WMIC
set "APPNAME=VirtualDJ 8"
set "GUID="
echo    Please Wait a while ... Getting IdentifyingNumber from this Application "%APPNAME%"
@for /f "skip=1 delims=" %%a in ('"wmic product where name="%APPNAME%" get IdentifyingNumber"') do (
    @for /f "delims=" %%b in ("%%a") do if not defined GUID set "GUID=%%~nb"
)
cls
echo The Application "%AppName%" has a Guid like this one : "%GUID%"
pause

當枚舉 Win32_Product 時,它實際上對每個產品執行完整的狀態檢查。 這不僅會影響您的腳本時間,還可能意味着也進行了修復/修改。 因此官方建議不要使用 Win32_Product, Product別名)

因此,我建議您改為解析注冊表,而且速度應該更快,以供您參考。

以下示例搜索鍵分支HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Products下的所有數據值,並使用匹配子鍵的最后一個葉子來重新創建您需要的 GUID 字符串(相同的字符串只是排序不同)

@Echo Off & SetLocal EnableExtensions
Set "AppName=App Name"
Set "FindCmd=%SystemRoot%\System32\find.exe"
Set "RegExe=%SystemRoot%\System32\reg.exe"
Set "RegKey=HKLM\SOFTWARE\Classes\Installer\Products"
Set "{}="
For /F "Delims=" %%G In ('^""%RegExe%" Query "%RegKey%" /S /F "%AppName%" /D /E
 2^> NUL ^| "%FindCmd%" /I "%RegKey:*\=%"^"') Do @Set "{}=%%~nxG"
If Not Defined {} GoTo :EOF
Set GUID={%{}:~7,1%%{}:~6,1%%{}:~5,1%%{}:~4,1%%{}:~3,1%%{}:~2,1%%{}:~1,1%^
%{}:~,1%-%{}:~11,1%%{}:~10,1%%{}:~9,1%%{}:~8,1%-%{}:~15,1%%{}:~14,1%%{}:~13,1%^
%{}:~12,1%-%{}:~-15,1%%{}:~-16,1%%{}:~-13,1%%{}:~-14,1%-%{}:~-11,1%%{}:~-12,1%^
%{}:~-9,1%%{}:~-10,1%%{}:~-7,1%%{}:~-8,1%%{}:~-5,1%%{}:~-6,1%%{}:~-3,1%^
%{}:~-4,1%%{}:~-1%%{}:~-2,1%}
Set GUID & Pause

只需更改第2行,將您的App Name占位符替換為您的實際產品名稱。 最后一行是可選的,只是為了確保結果符合您的期望。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM