获取文件夹内的所有文件的版本
我想获得文件夹内的所有文件的文件版本,我设法做的(但不是一个好方法),但现在我想要将文件夹名称与版本,所以我会知道哪个版本是哪个文件夹。 我不是在命令行非常好,只是使用它的一些小任务,每当我需要它,所以我的道歉提前.. 这里是我做了什么:获取文件夹内的所有文件的版本
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
谢谢你的回答,你能解释一下如何解决这个问题。 – Viki
非常感谢你的解释,但是我得到的错误是'C:\\ high \\ low \\ office.Services \\ bin \\ Services。 dll - 无效的别名动词** **为了更好的理解,我编辑了问题**,因为我可能错过了一些位。 – Viki
对不起,忘了逃离wmic命令中的等号,改变了上面的内容。 – LotPings