最簡單的方法是指定在WHERE子句中的驅動器和路徑,讓WMIC發現文件名。您還可以在where子句中指定VERSION IS NOT NULL。
列出的FileName將只是基本文件名,沒有擴展名。該擴展程序可在擴展列中找到(看上去!)。
wmic datafile where "drive='c:' and path='\\Program Files (x86)\\Oracle\\Document Capture\\' and version is not null" get FileName, Extension, Version
列總是按字母順序(按名稱)列出,無論您要求什麼順序。所以,你應該得到的輸出如下所示:
Extension FileName Version
dll vabc 1.3
dll vabd 1.3
dll vace 1.3
或者你可以請求名稱列,而不是文件名和擴展,但將包括完整的路徑。
Name Version
C:\Program Files (x86)\Oracle\Document Capture\vabc.dll 1.3
C:\Program Files (x86)\Oracle\Document Capture\vabd.dll 1.3
C:\Program Files (x86)\Oracle\Document Capture\vace.dll 1.4
另一種選擇是使用一個for循環迭代中的所有文件,然後通過在一個單獨的WMIC調用由FOR/F分析每個文件的完整路徑。有一個不幸的「功能」(aka bug)與FOR/F如何將WMIC unicode輸出轉換爲ansi,以致所有行都有不需要的尾隨回車符(\ r)可導致各種問題。不需要的尾部\ r被額外的FOR/F語句消除。
VERSION IS NOT NULL子句不是必需的,因爲FOR/F語句對將去除只包含空格的行。然後
@echo off
set "loc=C:\Program Files (x86)\Oracle\Document Capture\"
pushd "%loc%"
for %%F in (*) do for /f "skip=1 tokens=*" %%A in (
'wmic datafile where "name='%loc:\=\\%%%F'" get version 2^>nul'
) do for /f "delims=" %%V in ("%%A") do echo %%F %%V
popd
輸出應該如下所示:
vabc.dll 1.3
vabd.dll 1.3
vace.dll 1.4
謝謝!!奇蹟般有效! –