无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 2936|回复: 10
打印 上一主题 下一主题

[求助] 从补丁文件获取系统版本,怎么只取最后一个值?(已解决)

[复制链接]
跳转到指定楼层
1#
发表于 2022-3-13 19:06:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 窄口牛 于 2022-3-14 07:24 编辑
  1. for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  2.     if exist %%i:\windows\winsxs\*_microsoft-windows-servicingstack_31bf3856ad364e35_* (
  3.         if defined oslist (
  4.             set "oslist=!oslist! %%i"
  5.         ) else (
  6.             set "oslist=%%i"
  7.         )
  8.         for /f "tokens=4 delims=_" %%a in ('dir /b /d %%i:\windows\winsxs\*_microsoft-windows-servicingstack_31bf3856ad364e35_* /on^|find "serv"') do (
  9.             set "winver_%%i=%%a"
  10.         )
  11.     )
  12. )

  13. if defined oslist for %%a in (!oslist!) do (
  14.     for %%b in (!winver_%%a!) do (
  15.         echo;%%a    %%b
  16.     )
  17. )
  18. pause
复制代码
xp也会有winsxs,所以必须比较完整的路径判断。
来自 2#
发表于 2022-3-13 21:57:45 | 只看该作者
本帖最后由 nttwqz 于 2022-3-13 23:58 编辑
窄口牛 发表于 2022-3-13 20:54
dir就排序了,最大的肯定是最后一个(每个分区的)。


总感觉之前为谁写过,忘记了。

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  4.     if exist %%i:\windows\winsxs (
  5.         if defined oslist (
  6.             set "oslist=!oslist! %%i"
  7.         ) else (
  8.             set "oslist=%%i"
  9.         )
  10.         for /f "tokens=4 delims=_" %%a in ('dir /b /d %%i:\windows\winsxs\*_microsoft-windows-servicingstack_31bf3856ad364e35_* /on^|find "serv"') do (
  11.             set "winver_%%i=%%a"
  12.         )
  13.     )
  14. )

  15. if defined oslist for %%a in (!oslist!) do (
  16.     for %%b in (!winver_%%a!) do (
  17.         echo;%%a    %%b
  18.     )
  19. )
  20. pause
复制代码
回复

使用道具 举报

3#
发表于 2022-3-13 19:37:33 来自手机 | 只看该作者
遍历完了自动就是最后一个值,for执行很快的。

话说,最好将if移出来。记得版本号貌似可以直接if判断
回复

使用道具 举报

4#
发表于 2022-3-13 20:50:55 来自手机 | 只看该作者
那你这不叫取最后一个值,这叫取最大值
回复

使用道具 举报

5#
发表于 2022-3-13 22:38:51 来自手机 | 只看该作者
窄口牛 发表于 2022-3-13 22:35
不对,这就成了最后一个分区的最大补丁得值了,把其它分区的都丢了。看得我头晕,改都不会改。

你试过了?

我这单系统不便测试。。。
回复

使用道具 举报

6#
发表于 2022-3-14 00:00:14 来自手机 | 只看该作者
有个地方复制粘贴错了,已经改正。。。
回复

使用道具 举报

7#
 楼主| 发表于 2022-3-14 07:19:51 | 只看该作者
本帖最后由 窄口牛 于 2022-3-14 07:25 编辑

可以了。for一套就晕了。应该没有写过,这种判断方法未见有人公开过。

点评

这么写,估计你能看明白,for是从外到内,从c开始会将do后面()内的执行一遍,然后是d,再将do后面()内的执行一遍,最后是e,即使是用了相同的变量%%a也是如此。文本文件也是如此,是一行文本do后面()的就会执  详情 回复 发表于 2022-3-14 10:29
回复

使用道具 举报

8#
发表于 2022-3-14 10:29:26 来自手机 | 只看该作者
本帖最后由 nttwqz 于 2022-3-14 10:42 编辑
窄口牛 发表于 2022-3-14 07:19
可以了。for一套就晕了。应该没有写过,这种判断方法未见有人公开过。

  1. for %%a in (c d e) do (
  2.     echo %%a
  3.     for %%a in (1 2 3) do echo %%a
  4. )
  5. pause
复制代码



这么写,估计你能看明白,for是从外到内,从c开始会将do后面()内的执行一遍,然后是d,再将do后面()内的执行一遍,最后是e,即使是用了相同的变量%%a也是如此。文本文件也是如此,是一行文本do后面()的就会执行一遍,并不是一行代码将整个文本遍历一遍,然后再第二行代码。

遇到嵌套的for,从c开始这个嵌套for执行完再d,最后是e。如过是三重嵌套,那就是c,1,第三重for;d,2,第三重for。。。
回复

使用道具 举报

9#
 楼主| 发表于 2022-3-14 10:35:19 来自手机 | 只看该作者
这个知道,主要是不会控制执行次数,也就是要组合还是只排列。
回复

使用道具 举报

10#
发表于 2022-3-14 11:20:29 | 只看该作者
直接读取reg
回复

使用道具 举报

11#
发表于 2023-10-23 07:37:42 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-29 13:00

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表