批处理 根据查找到的字符串 执行相应的命令
批处理内容如下:@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 展开
@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 展开
4个回答
展开全部
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段,根据之前的错误结果这段会马上执行,所有相当于利用该逻辑问题实现了系统判断。请您再试试吧。
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段,根据之前的错误结果这段会马上执行,所有相当于利用该逻辑问题实现了系统判断。请您再试试吧。
展开全部
echo %sysinfo%|find "8"
if %errorlevel%==0 goto win8
echo %sysinfo%|find "7"
if %errorlevel%==0 (goto win7) else (goto xp)
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”这个字符,肯定是其他产品标识,换成相应的标志字符即可。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
echo !sysinfo!|find "8" &&goto win8
echo !sysinfo!|find "7" &&goto win7 ||goto xp
echo !sysinfo!|find "7" &&goto win7 ||goto xp
追问
你们这个两个回答的代码经测试:在win7跟winxp中都没有问题,在win8中不行!
请自行测试!我要求在win8中也可以才行!
另外:这个!跟%有什么区别?在上面代码中随意替换在7跟xp中都可以!去掉“setlocal enabledelayedexpansion”这一段也可以,但是去掉后在win8中不管选什么都会自动退出!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
vtr3horror 正解
楼主应该查查MSDN相关资料
楼主应该查查MSDN相关资料
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询