2017-04-25 15 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 
) 
  • /Fの最初は、渡された各ラインを反復''内部commamdの出力を解析%% A(小文字の~修飾子をよりよく区別するために、大文字の変数を使用します。 Dir以来
  • はfindstrのは、そう、デフォルトで制限された正規表現を使用しています(私だけがfindstr /i "bin\\Services.dll$に私はbinフォルダのIパイプdirの出力にのみServices.dllを取得ashureするにDir /B/S C:\high\low\*\bin\Services.dll
  • を行うことはできません最後の要素でワイルドカードを許可します\は別のものでエスケープする必要があり、$は行末に式を固定します)。
  • wmicコマンドでは、パス内のバックスラッシュを必要とし、文字列置換で可能なものをエスケープする必要があります(通常の変数でのみ機能します)
  • コードで変更された変数の実際の値を取得するには、ブロックので、!代わり%のために/ F変数名
  • 2をフレーミングするための等号でWMIC出力分割を解析し、VaRの%% Cにコンテンツを割り当てる
  • EDITは/ Fへremove the wmic cr
  • ための別の添加しました
+0

答えがありがとう、ありがとうございます。どうすればいいのか説明してください。 – Viki

+0

説明に感謝しますが、C:\\ high \\ low \\ office.Services \\ bin \\ Servicesというエラーが表示されます。 dll - 無効なエイリアス動詞 '**私はその点を逃したかもしれないので、理解を深めるため**の質問を編集しました。 – Viki

+0

申し訳ありませんが、上記で変更されたwmicコマンドの等号をエスケープするのを忘れました。 – LotPings

関連する問題