2017-04-25 128 views
2

我想獲得文件夾內的所有文件的文件版本,我設法做的(但不是一個好方法),但現在我想要將文件夾名稱與版本,所以我會知道哪個版本是哪個文件夾。 我不是在命令行非常好,只是使用它的一些小任務,每當我需要它,所以我的道歉提前.. 這裏是我做了什麼:獲取文件夾內的所有文件的版本

For /d %%a in (C:\high\low\*) Do (For /d %%* in (%%a) Do wmic datafile where name="%%~da\\high\\low\\%%~nx*\\bin\\Services.dll" get Version /value) ,我也得到輸出:

'版本= 2.2.0.1版本= 2.2.0.4版本= 2.2.0.4版本.... = 2.2.0.4

C:\high\low下20個文件夾,我想進入bin目錄每個子文件夾的所以我可以看到哪個文件夾升級,哪一個不是。

編輯
有超過20個文件夾和結構是這樣的:
C:\high\low\office.Services.Bolton\bin\Services.dll
C:\high\low\office.Services.Slough\bin\Services.dll
C:\high\low\office.Services.Hull\bin\Services.dll
.
.
.
C:\high\low\office.Services.Cosham\bin\Services.dll

我要檢查Services.dll的版本號和需要的輸出爲:
Bolton - 2.2.0.1
Slough - 2.3.0.1
Hull - 2.5.0.1
.
.
.
Cosham - 2.0.0.0

在此先感謝..

回答

1

而不是堆積for /d你可以做一個dir /b/s找到所有的服務。 DLL和與解析WMIC的討厭(CR,CR,LF)輸出一個for /f

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion 
For /F "tokens=*" %%A in (
    'Dir /B/S C:\high\low\Services.dll ^|findstr /i "bin\\Services.dll$"' 
) Do (
    Set "DLL=%%~fA" 
    Set "DLL=!DLL:\=\\!" 
    For /F "tokens=1* delims==" %%B in (
    'wmic datafile where name^="!DLL!" get Version /value^|findstr Version' 
) Do For /f "delims=" %%D in ("%%C") Do Echo Version: %%D %%~fA 
) 
  • 第一FOR/F解析''內的COMMAMD通過在傳遞的每個線迭代的輸出%% A(我更喜歡大寫變量來更好地區分小寫的~修飾符。
  • 由於Dir將只允許在最後一個元素通配符我不能做一個Dir /B/S C:\high\low\*\bin\Services.dll
  • 要ashure我只得到Services.dll在bin文件夾我管DIR輸出到findstr /i "bin\\Services.dll$(FINDSTR默認使用有限的正則表達式等等\必須與另一個逃脫,$錨定表達式在行的末尾)。
  • wmic命令需要路徑中的反斜槓也逃過了字符串替換的可能性(僅適用於普通變量)
  • 在(代碼塊)中,我們需要延遲擴展以獲取代碼中更改的變量的實際值塊,所以!代替%成幀變量名
  • 的第二FOR/F在等號解析WMIC輸出分割,分配內容爲VAR %%ç
  • EDIT加入另一個用於/ f以remove the wmic cr
+0

謝謝你的回答,你能解釋一下如何解決這個問題。 – Viki

+0

非常感謝你的解釋,但是我得到的錯誤是'C:\\ high \\ low \\ office.Services \\ bin \\ Services。 dll - 無效的別名動詞** **爲了更好的理解,我編輯了問題**,因爲我可能錯過了一些位。 – Viki

+0

對不起,忘了逃離wmic命令中的等號,改變了上面的內容。 – LotPings

相關問題