标题: [文本处理] 关于查找最新的补丁时间的bat处理,日期类型如何排序【已经解决】 [打印本页]
作者: raddison 时间: 2017-11-3 17:59 标题: 关于查找最新的补丁时间的bat处理,日期类型如何排序【已经解决】
本帖最后由 raddison 于 2017-11-4 14:30 编辑
C:\Users\Administrator>wmic qfe list full | find "InstalledOn"
InstalledOn=1/25/2013
InstalledOn=1/25/2013
InstalledOn=1/25/2013
InstalledOn=1/25/2013
InstalledOn=1/25/2013
InstalledOn=1/25/2013
InstalledOn=4/23/2013
InstalledOn=4/23/2013
InstalledOn=5/14/2017
InstalledOn=8/27/2014
InstalledOn=11/21/2010
比如上述得到的结果,我怎么实现得到 最新的那一条排序(InstalledOn=5/14/2017),到第一位呢?
@echo off
for /f "tokens=2 delims==" %%a in ('wmic qfe list full ^| find "InstalledOn"') do (
echo %%a
)
set Today=%t%
pause
我初步的想法是,首先得补充上面的日期格式,比如之前的月份,只有一位数,那就得将前面补0 ,第二位的同样也补0 ,然后进行sort 。
请大师们,指导下,如何实现。
作者: /zhqsystem/zhq 时间: 2017-11-3 21:39
for /f "delims=" %%a in (' wmic qfe get InstalledOn /value')do (
for /f "tokens=1,* delims==" %%a in ("%%a")do (
for /f "tokens=1,2,* delims=/" %%c in ("%%b")do (
set "%%ayyyy=00%%e"
set "%%amm=00%%c"
set "%%add=00%%d"
set "#%%a=!%%ayyyy:~-4!/!%%amm:~-2!/!%%add:~-2!"
set "_!#%%a!=%%b"
set "$!%%ayyyy:~-4!/!%%amm:~-2!/!%%add:~-2!=!#%%a!"
)
)
)
for /f "tokens=1,* delims==" %%a in ('set _')do set "提取值=%%b"&&set "%%a="
echo,!提取值!
作者: WHY 时间: 2017-11-3 22:29
- PowerShell -c "gwmi Win32_QuickFixEngineering | Sort InstalledOn -Des | ForEach{'InstalledOn='+$_.InstalledOn.ToString('M/d/yyyy')}"
复制代码
作者: WHY 时间: 2017-11-3 22:39
本帖最后由 WHY 于 2017-11-4 16:50 编辑
- @echo off & setlocal enabledelayedexpansion
- if "%~1" == "1" (
- for /f "tokens=1-3 delims=/" %%i in ('wmic qfe get InstalledOn^| findstr [0-9]') do (
- set /a MM=%%i+100, dd=%%j+100
- for /f %%k in ("%%k") do echo;%%k!MM!!dd! %%i/%%j/%%k
- )
- ) else (
- for /f "tokens=2" %%i in ('"%~f0" 1 ^| sort /r') do echo;InstalledOn=%%i
- pause
- )
复制代码
作者: raddison 时间: 2017-11-4 10:32
回复 3# WHY
你这个很办法最直接,另外的哥们提供的办法是通过文本处理的方式,手法也很高超。
目前还有其他的步骤继续完成:
PowerShell -c "gwmi Win32_QuickFixEngineering | Sort InstalledOn -Des | ForEach{+$_.InstalledOn.ToString('yyyyMMdd')}"
比如下面,我仅仅列出最新的补丁日期,那么我还想知道距离执行脚本时候当前时间,隔了多少天,这个是日期比较的问题,大师们,麻烦再教教我。辛苦大家。
@echo off
PowerShell -c "gwmi Win32_QuickFixEngineering | Sort InstalledOn -Des | ForEach{+$_.InstalledOn.ToString('yyyyMMdd')}" > a.txt
set /p lastday= < a.txt
echo %lastday%
del a.txt
pause
作者: raddison 时间: 2017-11-4 10:44
还有个问题,当PowerShell -c "gwmi Win32_QuickFixEngineering | Sort InstalledOn -Des | ForEach{+$_.InstalledOn.ToString('yyyyMMdd')}" 的日期格式 换成 yyyy-MM-dd的时候,执行时候回报错:
数字常量无效: 2017-07-04
作者: zaqmlp 时间: 2017-11-4 12:00
回复 6# raddison
当然的,删减代码中的字符也要符合语法才行
作者: raddison 时间: 2017-11-4 14:29
@echo off
PowerShell -c "gwmi Win32_QuickFixEngineering | Sort InstalledOn -Des | ForEach{+$_.InstalledOn.ToString('yyyyMMdd')}" > a.txt
set /p num= < a.txt
del a.txt
set num2=%date:~,10%
set num2=%date:/=%
set y=%num:~,4%
set m=%num:~4,2%
set d=%num:~6,2%
set a=dateserial(%y%,%m%,%d%)
set y2=%num2:~,4%
set m2=%num2:~4,2%
set d2=%num2:~6,2%
set b=dateserial(%y2%,%m2%,%d2%)
echo wscript.echo datediff("d",%a%,%b%)>t.vbs
for /f %%r in ('cscript /nologo t.vbs') do echo %%r
del t.vbs
pause
作者: raddison 时间: 2017-11-4 14:29
完整解决我的需求了,谢谢大家,谢谢各位大佬们!
作者: WHY 时间: 2017-11-4 16:38
回复 8# raddison
如果只是需要最新安装的补丁时间与现在的时间差,没必要写那么复杂- PowerShell -c "$D=(gwmi Win32_QuickFixEngineering|Sort InstalledOn)[-1].InstalledOn;((Get-Date)-$D).Days"
复制代码
作者: raddison 时间: 2017-11-7 22:24
回复 10# WHY
佩服!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |