批处理 根据查找到的字符串 执行相应的命令

批处理内容如下:@ECHOOFFcls&echo.&echo正在检测当前系统……&ping/n3127.1>nulPushd%~dp0%rem检查系统版本setlocal... 批处理内容如下:

@ECHO OFF
cls&echo.&echo 正在检测当前系统……&ping/n 3 127.1>nul
Pushd %~dp0%
rem 检查系统版本
setlocal enabledelayedexpansion
set OSVER="HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName
for /f "skip=2 tokens=2*" %%i in ('REG QUERY %OSVER%') do set sysinfo=%%j
set TC="" & color 0a & mode con: cols=50 lines=10 & cls & echo.
echo 您当前的主机上安装的操作系统 & echo. & echo 版本为:%sysinfo% & echo.
echo 程序将按此系统,运行后续的命令吗? & echo.
SET /P TC= 任意键开始,Q 键退出:
if /I "%TC%"=="Q" goto TC

…………………………
在这里根据上面的参数%sysinfo%中的字符来判断:
如果有“8” 则 goto win8 否则继续判断
如果有“7” 则 goto win7 否则 goto xp
…………………………

:xp
……
……

:win7
……
……

:win8
……
……

:TC
exit
展开
 我来答
绝版唯CI
2016-04-14 · TA获得超过556个赞
知道小有建树答主
回答量:404
采纳率:0%
帮助的人:183万
展开全部
echo %sysinfo%|find "8"
if %errorlevel%==0 goto win8
echo %sysinfo%|find "7"
if %errorlevel%==0 (goto win7) else (goto xp)如果不对,应该是sysinfo变量在win8下就没有取到“8”这个字符,肯定是其他产品标识,换成相应的标志字符即可。win8以前,成功时errorlevel为0,失败为1;win8好像变成1和2了,所以这么做就不行了,如果把第一个判断改为errorlevel==1,则在win7和xp下就会跳转到win8段。

如果您能够确定就这三种类型系统运行该批处理,可以这样改(不太严谨,但应该能解决问题):
@echo %sysinfo%|find "7"
@if %errorlevel%==0 goto win7
@echo %sysinfo%|find "XP"
@if %errorlevel%==0 (goto xp) else (goto win8)

:win8
echo 我是Win8
pause
exit

:xp
echo 我是XP
pause
exit

:win7
echo 我是Win7
pause
exit

解释一下:win8下相当于原来所有判断都不成立,直接去执行接下来的:XP段了,所以您看到了错误的结果。现在改完了相当于在XP和win7下都能正常跳转,虽然在win8下还是不会跳转,但是紧接着就是win8段,根据之前的错误结果这段会马上执行,所有相当于利用该逻辑问题实现了系统判断。请您再试试吧。
朴素且可爱灬小喵1
推荐于2017-09-30 · TA获得超过2902个赞
知道大有可为答主
回答量:1713
采纳率:89%
帮助的人:505万
展开全部
echo %sysinfo%|find "8"
if %errorlevel%==0 goto win8
echo %sysinfo%|find "7"
if %errorlevel%==0 (goto win7) else (goto xp)
更多追问追答
追问
我在win8系统下用管理员运行测试没有直接跳转到:win8下!而仍然从:xp开始顺序执行命令
请将后续内容修改为如下内容后测试:
:xp
echo 我是XP
pause
exit

:win7
echo 我是Win7
pause
exit

:win8
echo 我是Win8
pause
exit

目的就是要求:如果在参数%sysinfo%中找到“8” 则 goto win8,找到“7” 则 goto win7,找到“xp”则 goto xp
追答
我写的语句意思就是你要的结果。如果不对,应该是sysinfo变量在win8下就没有取到“8”这个字符,肯定是其他产品标识,换成相应的标志字符即可。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陈哥深惠通勤
2012-09-01 · TA获得超过1175个赞
知道小有建树答主
回答量:1909
采纳率:33%
帮助的人:825万
展开全部
echo !sysinfo!|find "8" &&goto win8
echo !sysinfo!|find "7" &&goto win7 ||goto xp
追问
你们这个两个回答的代码经测试:在win7跟winxp中都没有问题,在win8中不行!

请自行测试!我要求在win8中也可以才行!

另外:这个!跟%有什么区别?在上面代码中随意替换在7跟xp中都可以!去掉“setlocal enabledelayedexpansion”这一段也可以,但是去掉后在win8中不管选什么都会自动退出!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
批处理全能手
2012-09-08 · TA获得超过142个赞
知道答主
回答量:125
采纳率:0%
帮助的人:119万
展开全部
vtr3horror 正解
楼主应该查查MSDN相关资料
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式