无忧启动论坛

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

[求助] 指定系统版本并执行相关操作

[复制链接]
跳转到指定楼层
1#
发表于 2024-8-6 00:25:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
假设系统为win7并且只在win7上操作
而文件夹里有1.txt 3.reg这两个文件1.txt 是复制在 系统盘Windows目录下
而 3.reg 是在复制完文件后 注册此文件

批处理如下:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

:: 定义要复制的文件和目标路径
SET sourceFile=1.txt
SET destination=C:\Windows

:: 定义要运行的注册表文件
SET regFile=3.reg

:: 使用wmic获取操作系统版本号
for /f "tokens=1,2,3 delims==" %%a in ('wmic os get Version /value') do (
    if "%%a"=="Version" (
        set "osVersion=%%b"
    )
)

:: 检查是否为Windows 7
if "!osVersion!"=="6.1" (
    echo 检测到Windows 7
    goto CopyAndRun
) else (
    echo 这不是Windows 7
    goto End
)

:CopyAndRun
:: 复制文件到目标路径
if exist "%sourceFile%" (
    copy /y "%sourceFile%" "%destination%\%sourceFile%"
) else (
    echo 源文件 %sourceFile% 不存在。
    goto End
)

:: 运行注册表文件
if exist "%regFile%" (
    reg import "%regFile%"
    echo 注册表文件 %regFile% 已成功运行。
) else (
    echo 注册表文件 %regFile% 不存在。
)

:End
ENDLOCAL
pause

实体系统测试 在 获取操作系统版本号 这里报错
始终输出为 这不是Windows 7
感觉是获取版本号这里报错 能优化下就好
2#
发表于 2024-8-6 00:51:58 | 只看该作者

感谢辛苦提供分享!
回复

使用道具 举报

3#
发表于 2024-8-6 08:06:40 | 只看该作者
感谢分享!学习一下。
回复

使用道具 举报

4#
发表于 2024-8-6 08:17:54 | 只看该作者
感谢分享!
回复

使用道具 举报

5#
发表于 2024-8-6 08:19:12 | 只看该作者
学习了!
谢谢楼主
回复

使用道具 举报

6#
发表于 2024-8-6 08:49:38 | 只看该作者
感谢分享!学习一下。
回复

使用道具 举报

7#
发表于 2024-8-6 09:59:20 | 只看该作者
谢谢,学习了
回复

使用道具 举报

8#
发表于 2024-8-6 11:01:57 | 只看该作者

谢谢
回复

使用道具 举报

9#
发表于 2024-8-6 11:22:40 | 只看该作者
感谢楼主分享
回复

使用道具 举报

10#
发表于 2024-8-6 11:46:13 | 只看该作者
可能会不严谨,比如6.1可能是6.1.7603,还有可能是10.0.10586.1XXX...

-----------------------
回复

使用道具 举报

11#
发表于 2024-8-6 11:49:02 | 只看该作者
来了解下
回复

使用道具 举报

12#
发表于 2024-8-6 11:52:38 来自手机 | 只看该作者
我一般是对比其他系统没有的文件或者注册表项来判断
回复

使用道具 举报

13#
发表于 2024-8-6 11:59:15 | 只看该作者
  1. @echo off
  2. SETLOCAL ENABLEDELAYEDEXPANSION

  3. :: 定义要复制的文件和目标路径
  4. SET sourceFile=1.txt
  5. SET destination=C:\Windows

  6. :: 定义要运行的注册表文件
  7. SET regFile=3.reg

  8. :: 使用wmic获取操作系统版本号
  9. for /f "tokens=2 delims==" %%a in ('wmic os get Version /value') do (
  10.     set "osVersion=%%a"
  11. )

  12. :: 去除版本号中的空格
  13. set "osVersion=%osVersion: =%"

  14. :: 检查是否为Windows 7
  15. if "%osVersion:~0,3%"=="6.1" (
  16.     echo 检测到Windows 7
  17.     goto CopyAndRun
  18. ) else (
  19.     echo 这不是Windows 7 (版本号: %osVersion% )
  20.     goto End
  21. )

  22. :CopyAndRun
  23. :: 复制文件到目标路径
  24. if exist "%sourceFile%" (
  25.     copy /y "%sourceFile%" "%destination%\%sourceFile%"
  26.     echo 文件 %sourceFile% 已成功复制到 %destination%
  27. ) else (
  28.     echo 源文件 %sourceFile% 不存在。
  29.     goto End
  30. )

  31. :: 运行注册表文件
  32. if exist "%regFile%" (
  33.     reg import "%regFile%"
  34.     echo 注册表文件 %regFile% 已成功运行。
  35. ) else (
  36.     echo 注册表文件 %regFile% 不存在。
  37. )

  38. :End
  39. ENDLOCAL
  40. pause
复制代码

点评

方案可用 已解决  发表于 2024-8-6 14:56
回复

使用道具 举报

14#
发表于 2024-8-6 14:15:17 | 只看该作者
学习
回复

使用道具 举报

15#
发表于 2024-8-6 14:36:38 来自手机 | 只看该作者
dpinfo和dp盘符整理都有系统版本判断代码,去抄一下。

点评

我以前好像是比对shell32.dll文件版本号来区分系统的... --------------------  详情 回复 发表于 2024-8-6 15:17
方案可用 已解决  发表于 2024-8-6 14:55
回复

使用道具 举报

16#
发表于 2024-8-6 15:17:09 | 只看该作者
本帖最后由 邪恶海盗 于 2024-8-6 15:20 编辑
nttwqz 发表于 2024-8-6 14:36
dpinfo和dp盘符整理都有系统版本判断代码,去抄一下。

我以前好像是比对kernel32.dll文件版本号来区分系统的...

--------------------

点评

牛大之前研究出一种类似查找winsxs文件夹相关文件离线获取版本号的方法,貌似我还写过几行代码。在线的话还是ver简单可靠。  详情 回复 发表于 2024-8-6 16:52
回复

使用道具 举报

17#
发表于 2024-8-6 16:52:01 | 只看该作者
邪恶海盗 发表于 2024-8-6 15:17
我以前好像是比对kernel32.dll文件版本号来区分系统的...

--------------------

牛大之前研究出一种类似查找winsxs文件夹相关文件离线获取版本号的方法,貌似我还写过几行代码。在线的话还是ver简单可靠。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-9-28 23:25

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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