获取文件夹内的所有文件的版本

问题描述:

我想获得文件夹内的所有文件的文件版本,我设法做的(但不是一个好方法),但现在我想要将文件夹名称与版本,所以我会知道哪个版本是哪个文件夹。 我不是在命令行非常好,只是使用它的一些小任务,每当我需要它,所以我的道歉提前.. 这里是我做了什么:获取文件夹内的所有文件的版本

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

在此先感谢..

而不是堆积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