批处理之IF语句

在批处理程序中执行条件处理。如果 if 命令中指定的条件为真,Windows 将执行该条件后的命令。如果条件为假,Windows 将忽略 if 子句中的命令,并执行 else 子句中的任何命令(如果已经指定了命令)。

if [not] errorlevel number command [else expression]

if [not] string1==string2 command [else expression]

if [not] exist filename command [else expression]

启用了命令扩展:

if [/i] string1 compare-op string2 command [else expression]

if cmdextversion number command [else expression]

if defined variable command [else expression]

参数

not

指定只有当条件为假时 Windows 才能执行该命令。

errorlevel number

只有当前一个程序返回大于或等于 number 的退出代码时,才能指定真条件。

command

指定在符合前面的条件时 Windows 将执行的命令。

string1==string2

只有当 string1string2 相同时才能指定真条件。这些值可以是文字字符串或批处理变量(例如,%1)。文字字符串不需要引号。

exist filename

如果 filename 存在,则指定真条件。

compare-op

以下三字母比较操作符中的一个:

操作符 说明 EQU 等于 NEQ 不等于 LSS 少于 LEQ 少于或等于 GTR 大于 GEQ 大于或等于

/i

指定 /i 开关时,将强制字符串比较按忽略大小写情况进行。/i 开关也可以用于 ifstring1==string2 格式。这些比较是通用的,如果 string1string2 都由所有的数字组成,那么字符串将被转换为数字并且将执行数字比较。

cmdextversion number

cmdextversion 条件的作用就像是 errorlevel,但它需要与 Cmd.exe 的“命令扩展”功能相关联的内部版本号比较。第一版是 1,当重大的增强添加到命令扩展中时,版本号将增加 1。当禁用命令扩展时,cmdextversion 条件不会为真。

defined variable

defined 条件的作用就象是 exist,但它使用环境变量名,并且如果环境变量已经定义它将返回真值。使用该条件添加三个变量:%errorlevel%, %cmdcmdline%%cmdextversion%

%errorlevel% 扩展到 errorlevel 当前值的字符串表达式,如果没有名为 ERRORLEVEL 的环境变量,在这种情况下可取代它的值。程序运行后,下面的图解 errorlevel 使用:

goto answer%erorlevel% :answer0 echo Program had return code 0 :answer1 echo Program had return code 1

也可以在 compare-op 中使用上面列出的比较操作符:

if %errorlevel% LEQ 1 goto okay

%cmdcmdline% 在任何 Cmd.exe 处理之前扩展传递到 Cmd.exe 的源命令行,如果没有名为 cmdcmdline 的环境变量,在这种情况下可取代它的值。

%cmdextversion% 扩展到 cmdextversion 当前值的字符串表达式,如果没有名为 CMDEXTVERSION 的环境变量,在这种情况下可取代它的值。

expression

else 子句中,expression 由 Windows 命令和任何传递到命令的参数组成。

附加一个实例,都是转的……谢谢作者

1。判断目录或文件的存在,来从服务器同步文件到本地

如D:\pubclt 目录被客人删除。可以用这种办法解决(注:我的服务器为fyt200)

@echo off

if exist tmp.txt del /q tmp.txt

for /f %%i in ('dir /a /b D:\pubclt\pubwin.exe') do echo %%i>>tmp.txt

if exist tmp.txt (goto 11) else (goto 12)

if exist tmp.txt del /q tmp.txt

:11

@echo -----------------------------

@echo 客户端无需更新.

@echo -----------------------------

goto q

:12

xcopy \\fyt200\share\pubclt d:\pubclt\ /s /f /y /q & \\fyt200\share\soft\control\pubwin.exe

d:\pubclt\pubwin.exe

@echo -----------------------------

@echo ....客户端更新完毕...........

@echo -----------------------------

:q

exit

这个批处理的意思是查找d盘中pubclt目录下的pubwin.exe文件,如果查找存在,则goto 11,如不存在则 goto12 其实这种办法可以用if exist 和if not exist命令实现,但是本人觉得这个会更好用一些。处理面也会广很多。

2。对比服务器的某个目录,删除多余的目录和文件。(注:我的服务器为fyt200)

@echo -----------------------------

@echo .同步更新磁盘D中所有和文件夹.

@echo -----------------------------

@echo .

cd /d d:

for /f "usebackq delims=" %%A in (`dir /a /b`) do (attrib "%%A" -r -h -s)

for /d %%A in ("d:\*") do if not exist "\\fyt200\share\%%~nA" rd /s /q "%%A"

for %%A in ("d:\*") do if not exist "\\fyt200\share\%%~nA" del /f /q "%%A"

这个大家一定要设置好来,比如你常用的d盘目录, netgame langame program files bak 下载区 等这些目录一定要在服务器上有,否则会无情的被删除。要是整个网吧都被删除了,呵呵不要怪我,dos下删除文件的速度是惊人的快的。。大家一定要先修改好自己的服务器路径。

3。隐藏d盘根目录中的所有文件和文件夹

cd /d d:

for /f "usebackq delims=" %%A in (`dir /a /b`) do (attrib "%%A" -r +h -s)

这个懂点批处理的人可能都懂,不多解释

4。在批处理中使用密码。当然只是简单的批处理,没有办法使用星号密码,技术还没有到那个地步。呵呵。。

@echo off

set num=0

:11

set /p pass=请输入密码:

if "%pass%"=="admin" goto next1

set /a num=%num% + 1

if %num%==3 goto no1

goto 11

:no1

%windir%\system32\rundll32.exe user32.dll,LockWorkStation

goto 11

:next1

pause

这个批处理的意思是:先设置num为0。密码为admin 输入正确,跳转到next1 ,若密码输入错误一次,则num加1,若3此输入密码错误则锁屏。。

另:批处理做好后,最好是使用QUICKbat等软件把文件属性改为幽灵文件。然后编译为EXE文件。或者用vbs文件后台执行,vbs这个网上都很流行。如:

DIM objShell

set objShell=wscript.createObject("wscript.shell")

iReturn=objShell.Run("cmd.exe /C\\192.168.0.200\share\soft\control\client.bat", 0, TRUE)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值