批处理 笔记
18. if
18.1 if not errorlevel number command
if errorlevel 这个句子必须放在某个命令的后面,执行命令后由 if errorlevel 来判断命令的返回值
number 取值范围为0-255,判断时值的排列顺序应该由大到小。返回的值大于等于指定的值时,条件成立
例子
@echo off
dir c: rem退出代码为>=1就跳至标题1处执行,>=0就跳至标题0处执行
IF ERRORLEVEL 1 goto 1
IF ERRORLEVEL 0 goto 0 Rem 上面的两行不可交换位置,否则失败了也显示成功。
:0 echo 命令执行成功! Rem 程序执行完毕跳至标题exit处退出
goto exit
:1 echo 命令执行失败! Rem 程序执行完毕跳至标题exit处退出
goto exit
:exit
pause
18.2 if [not] string1==string2 command
str1和str2都为字符的数据,英文内字符的大小写将看作不同,这个条件中的等于号必须是两个
条件相等后执行后面饿command
为防止字符串中含有空格,可用以下格式:
if [NOT] {string1}=={string2} command
if [NOT] [string1]==[string2] command
if [NOT] "string1"=="string2" command
18.3 if [not] exist filename command
EXIST filename为文件或目录存在的意思
echo off
IF EXIST autoexec.bat echo 文件存在!
IF not EXIST autoexec.bat echo 文件不存在!
19. setlocal 与变量延迟
问题的引入,
@echo off
set a=4
set a=5 & echo %a%
pause
结果:4
不输出5的原因:总是读取一行,并做了预处理,所以输出结果为4
为能感知环境变量的动态变化,批处理设计变量延迟。简而言之,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值
@echo off
setlocal enabledelayedexpansion
set a=4
set a=5 & echo !a!
pause
结果:5 解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是“setlocal enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。
使用 setlocal enableddelayedexpansion 启用变量延迟
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
set a=%%i
echo !a!
)
pause
提示:在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。
@echo off
::目的:交换两个变量的值,但是不使用临时变量
::Code by JM 2007-1-24 CMD@XP
::出处:http://www.cn-dos.net/forum/viewthread.php?tid=27078
set var1=abc
set var2=123
echo 交换前: var1=%var1% var2=%var2%
set var1=%var2%& set var2=%var1%
echo 交换后: var1=%var1% var2=%var2%
pause
20. attrib 显示或更改文件属性
ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[drive:] [path] filename] [/S [/D]]
+ 设置属性。 - 清除属性。 R 只读文件属性。 A 存档文件属性。 S 系统文件属性。 H 隐藏文件属性。 [drive:][path][filename] 指定要处理的文件属性。 /S
处理当前文件夹及其子文件夹中的匹配文件。 /D 也处理文件夹。
例: md autorun attrib +a +s +h autorun 上面的命令将建立文件夹autorun,然后将其设为存档、系统、隐藏属性
18.1 if not errorlevel number command
if errorlevel 这个句子必须放在某个命令的后面,执行命令后由 if errorlevel 来判断命令的返回值
number 取值范围为0-255,判断时值的排列顺序应该由大到小。返回的值大于等于指定的值时,条件成立
例子
@echo off
dir c: rem退出代码为>=1就跳至标题1处执行,>=0就跳至标题0处执行
IF ERRORLEVEL 1 goto 1
IF ERRORLEVEL 0 goto 0 Rem 上面的两行不可交换位置,否则失败了也显示成功。
:0 echo 命令执行成功! Rem 程序执行完毕跳至标题exit处退出
goto exit
:1 echo 命令执行失败! Rem 程序执行完毕跳至标题exit处退出
goto exit
:exit
pause
18.2 if [not] string1==string2 command
str1和str2都为字符的数据,英文内字符的大小写将看作不同,这个条件中的等于号必须是两个
条件相等后执行后面饿command
为防止字符串中含有空格,可用以下格式:
if [NOT] {string1}=={string2} command
if [NOT] [string1]==[string2] command
if [NOT] "string1"=="string2" command
18.3 if [not] exist filename command
EXIST filename为文件或目录存在的意思
echo off
IF EXIST autoexec.bat echo 文件存在!
IF not EXIST autoexec.bat echo 文件不存在!
19. setlocal 与变量延迟
问题的引入,
@echo off
set a=4
set a=5 & echo %a%
pause
结果:4
不输出5的原因:总是读取一行,并做了预处理,所以输出结果为4
为能感知环境变量的动态变化,批处理设计变量延迟。简而言之,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值
@echo off
setlocal enabledelayedexpansion
set a=4
set a=5 & echo !a!
pause
结果:5 解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是“setlocal enabledelayedexpansion”,并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。
使用 setlocal enableddelayedexpansion 启用变量延迟
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
set a=%%i
echo !a!
)
pause
提示:在没有开启变量延迟的情况下,某条命令行中的变量改变,必须到下一条命令才能体现。
@echo off
::目的:交换两个变量的值,但是不使用临时变量
::Code by JM 2007-1-24 CMD@XP
::出处:http://www.cn-dos.net/forum/viewthread.php?tid=27078
set var1=abc
set var2=123
echo 交换前: var1=%var1% var2=%var2%
set var1=%var2%& set var2=%var1%
echo 交换后: var1=%var1% var2=%var2%
pause
20. attrib 显示或更改文件属性
ATTRIB [+R|-R] [+A|-A] [+S|-S] [+H|-H] [[drive:] [path] filename] [/S [/D]]
+ 设置属性。 - 清除属性。 R 只读文件属性。 A 存档文件属性。 S 系统文件属性。 H 隐藏文件属性。 [drive:][path][filename] 指定要处理的文件属性。 /S
处理当前文件夹及其子文件夹中的匹配文件。 /D 也处理文件夹。
例: md autorun attrib +a +s +h autorun 上面的命令将建立文件夹autorun,然后将其设为存档、系统、隐藏属性
@IS2120#CNBLOGS.T2169364049[T1,L65,R1,V259]:备忘
$ € ₤ ₭ ₪ ₩ ₮ ₦ ₱ ฿ ₡ ₫ ﷼ ¥ ﷼ ₫ ₡ ฿ ₱ ₦ ₮ ₩ ₪ ₭ ₤ € $