电脑爱好者论坛's Archiver

辉少 发表于 2008-6-6 01:16

一个批处理实例的解释,对学习批处理的新手很有帮助

@SETLOCAL
@dir %windir%\system32\drivers\amdfix.sys|find "amdfix.sys" > nul 2>nul
@if "%ERRORLEVEL%"=="0" goto renthefile
@echo ###您的系统里没有amdfix.sys这个文件.本程序将停止运行.###
@pause
@goto quit

:renthefile
@ren %windir%\system32\drivers\amdfix.sys amdfix.sys.old
@echo ###amdfix.sys已更名成amdfix.sys.old.请重起系统后运行游戏.谢谢!###


@echo.
@echo 请输入以下选项前面的数字
@echo.
@echo 1: 重启系统
@echo 2: 稍后手动重启系统
@echo.
@set /p UserSelection=输入您的选择(1、2)
@if "%UserSelection%"=="1" goto rebootsys
@if "%UserSelection%"=="2" goto quit
@cls

:rebootsys
@cls
@echo ###系统将在5秒后重启......###
@tsshutdn 0 /REBOOT /delay:5 > nul 2>nul


:quit
@ENDLOCAL

下面的批处理的语句的解释

@SETLOCAL 解释:开始批处理文件中环境改动的本地化操作
@dir %windir%\system32\drivers\amdfix.sys|find "amdfix.sys" > nul 2>nul 解释:用dir命令列取windows\system32\amdfix.sys文件,并且用find查找列取结果中是否含有"amdfix.sys"字串,这里有默认值,如果find成功,errorlevel则为0,如果find失败,则为1

@if "%ERRORLEVEL%"=="0" goto renthefile 解释:这里对errorleve值进行判断,errorlevel的值在上一行的find命令中获取,如果=0,就是存在amdfix.sys文件,跳转到renthefile行,LOOP是标签,标签以":"开头,所以跳转到:renthefile下面的那段
@echo ###您的系统里没有amdfix.sys这个文件.本程序将停止运行.### 解释:echo输出文本
@pause ,暂停
@goto quit ,退出批处理

:renthefile 这是一个标签,当errolevel=1的时候,跳转到这里执行
@ren %windir%\system32\drivers\amdfix.sys amdfix.sys.old 更改文件名,将windows\system32\drivers\amdfix.sys更名为amdfix.sys.old
@echo ###amdfix.sys已更名成amdfix.sys.old.请重起系统后运行游戏.谢谢!### 这句是echo输出文本,方便用户查看,无实际意义


@echo. echo输出空行
@echo 请输入以下选项前面的数字 echo输出文本
@echo. 输出空行
@echo 1: 重启系统 echo输出文本
@echo 2: 稍后手动重启系统 echo输出文本
@echo.
@set /p UserSelection=输入您的选择(1、2) 使用set命令,定义一个变量,变量可选择值为括号内的值,定义变量名为UserSelection,值如果输入1就为1,如果选择2就为2
@if "%UserSelection%"=="1" goto rebootsys 判断语句.如过UserSelection变量=1,跳转到rebootsys上
@if "%UserSelection%"=="2" goto quit 判断语句.如过UserSelection变量=1,跳转到quit上
@cls

:rebootsys 这是rebootsys段
@cls 清屏
@echo ###系统将在5秒后重启......### 文本输出
@tsshutdn 0 /REBOOT /delay:5 > nul 2>nul 关机命令tsshutdn, 0表示等待时间,/reboot表示关机的行为,是重新启动,/delay定义注销所有连接的会话后要等待的时间,为5秒


:quit
@ENDLOCAL 中止本地化操作



> nul 2>nul的解释
>nul 2>nul表示把标准输出和标准错误输出都定向到nul

>nul是把标准输出到nul中
2>nul是把错误信息也输出到nul中
通过这两个,所有提示信息你都将看不到
避免屏幕上内容乱糟糟的

Batcher 发表于 2008-6-8 11:07

希望新手有耐心看完整篇文章

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2007 Comsenz Inc.