(五)chkdsk 作用:检查磁盘并显示状态报告。
格式:CHKDSK 盘符\\路径\\文件名 [/F] [/V] [/R] [/X] [/I] [/C] [/L[:size]] 盘符 指定驱动器(后面跟一个冒号)、装入点或卷名。 文件名 可不写,仅用于 FAT/FAT32: 指定要检查是否有碎片的文件。 /F 修复磁盘上的错误。
/V 在 FAT/FAT32 上: 显示磁盘上每个文件的完整路径和名称。 在 NTFS 上: 如果有清除消息,将其显示。 /R 查找不正确的扇区并恢复可读信息(隐含 /F)。
/L:size 仅用于 NTFS: 将日志文件大小改成指定的 KB 数。 如果没有指定
大小,则显示当前的大小。
/X 如果必要,强制卷先卸下卷的所有打开的句柄就会无效(隐含 /F)。 /I 仅用于 NTFS: 对索引项进行强度较小的检查。 /C 仅用于 NTFS: 跳过文件夹结构的循环检查。
/I 和 /C 命令行开关跳过卷的某些检查,减少运行 Chkdsk 所需的时间。
(六) convert:http://bbs.bathome.net/thread-13910-1-1.html
自学批处理笔记(12)if
二十六. if 批处理中很常用的一个命令
格式:IF [NOT] ERRORLEVEL number command IF [NOT] string1==string2 command IF [NOT] EXIST filename command
NOT 指定只有条件为 false 的情况下, Windows XP 才应该执行该命令。
ERRORLEVEL number 如果最后运行的程序返回一个等于或大于指定数字的退出编码,指定条件
为 true。
string1==string2 如果指定的文字字符串匹配,指定条件为 true。
EXIST filename 如果指定的文件名存在,指定条件为 true。
command 如果符合条件,指定要执行的命令。如果指定的条件为 FALSE,命令后可跟一个执行 ELSE
关键字后的命令的 ELSE 命令。 一个一个进行讲解:
(一)if [not] string1==string2 命令1 else 命令2 如果sting1会等于string2则执行命令1否则执行命令2。
当然了这里的string1和string2也不一定都是相等的关系,有时也比较大小,可是我们不用><号而是用:
EQU - 等于 NEQ - 不等于 LSS - 小于 LEQ - 小于或等于 GTR - 大于 GEQ - 大于或等于
注意:if区分大小写,不区分字母大小写——使用参数“/i” if /i a == A echo “a”等于“A”
讲解:在IF命令后面使用参数“I”,表示不区分字母大小写。
区分大小写能够进行更精确的判断,不区分大小写则可以扩大判断的范围。 使用双引号:注意变量、标点符号等一些特殊字符的比较需要双引号,如: set var=我爱批处理
if /i \爱\第二个字是:爱。
一般字符串(数字除外)如果不能保证输入的字符是否有效值,最好使用双引号括起来。
来一个例子: @echo off
set /p var=请输入第一个比较字符: set /p var2=请输入第二个比较字符:
if %var% == %var2% (echo 我们相等) ELSE echo 我们不相等 pause
上面这个例子可以判断你输入的值是不是相等,但是你如果输入相同的字符,但是如果其中一个后面打了一个空格,
这个例子还是会认为相等,如何让有空格的输入不相等呢?我们在比较字符上加个双引号就可以了.又是命令有多行
这时我们就应该用()括起来。还有救是不要写成这样子: if %var1%==%var2% (echo 我们相等)else (echo 我们不相等)
要把(放在else那行这样系统才知道下面的是if的内容,否则系统会认为(echo我们不相等)是新命令。也就是
以后命令多了就:
if string1==string2 (命令1 命令2......)else ( 命令3
命令4....)
(二)IF [NOT] ERRORLEVEL number command
这个用法的基本做用是判断上一条命令执行结果的代码,以决定下一个步骤.一般上一条命令的执行结果代码只有
两结果,\成功\用0表示 \失败\用1(有时不是1)表示。还有就是%errorlevel%也是系统内的变量。
在举几个例子给新手理解 @echo off net usertest
IF %ERRORLEVEL% == 1 echo net user 执行失败了! pause
这个是判断上一条命令是否执行失败的 @echo off
set /p var=随便输入个命令: %var%
if %ERRORLEVEL% == 0 goto yes goto no :yes
echo !var! 执行成功了 pause exit :no
echo 基本上执行失败了.. pause
这个是根据你输入的命令,自动判断是成功还是失败了! 在来一个简化版的 @echo off
set /p var=随便输入个命令: %var%
if %ERRORLEVEL% == 0 (echo %var%执行成功了) ELSE echo %var%执行失败了! pause
else后面写上执行失败后的操作!
当然我门还可以把if else这样的语句分成几行写出来,使他看上去好看点... @echo off
set /p var=随便输入个命令: %var%
if %ERRORLEVEL% == 0 ( echo !var! 执行成功了 ) ELSE (
echo 基本上执行失败了.. )
pause
(三)IF [NOT] EXIST filename command
如果存在(不存在)文件名 就执行后面的命令,这就不多说了。 三个命令else都是可用课不用的。
好做一道之前还不过完善的练习:给定一窜字符,求长度。(来自网络) 这是代码: @echo off
set /p str=请输入任意长度的字符串: echo 你输入了字符串:\if not defined str (pause & goto :eof) set num=0 :len
set /a num+=1 set str=%str:~0,-1% if defined str goto len
echo 字符串长度为:%num% pause
(四)if defined 命令
判断一个变量是否为已经赋值。也就是判断变量是否为空。 1、defined
set /p var=请按任意键或回车:
if defined var echo ^%var^% 已经被赋值:%var% 讲解:假如变量%var%赋值,则显示后面内容。 注意:此处的变量名不必使用百分号“%”括住。 支持if的其它参数开关:
if not defined var (echo ^%var^% 没有被赋值:%var%) else (echo 已赋值) 当变量名为其它特殊符号时,需要双引号???(待) 2、两种检测空值方法比较
前面我们了解到一种判断变量是否为空的方法:if \为空!此处的 if defined 也有着同样的作用,并且比前者更有效。比较: if \——假如变量是空格……
if not defined var ——假如变量没有任何内容,也没有空格……
注意:空格也是一种特殊的值,准确地说,上者判断的是变量等于空格时的情况,而下者则判断所有情形,包括空格。因此,defined比前者更加彻底,包含了前者。 使用比较: @echo off
set /p a=输入字母Q:
if /i \你输入了字母Q。 set /p b=输入空格:
if \你输入了空格。(待)rem这里如果输入多个空格if 也认为是假的
set /p c=直接回车:
if not defined c echo 你直接回车了。
rem 这个等价于 if \你直接回车了。 pause
批处理中的if defined 需知:
源地址:http://www.bathome.net/thread-2050-1-10.html很详细 用 if defined 判断某个变量是否被定义过时需注意以下2点:
1、不能直接输入空格,有空格时需用变量来代替,且必须是用双!!来引用这个值含空格的变量 也就是必须开启延迟变量,或者将需判断的变量名赋值给 for 的 %%i 变量。 例如你运行下面代码会发现什么: @echo off set /a a+=1 if %a%==1 ( set b=1 echo %b% ) pause
解决方法一,使用开启变量延时用!b!来代替%b% 解决方法二,用call echo %%b%%代替echo %b% 解决方法三,用goto语句,在echo %b% 前面加上 goto a :a
2、若判断的变量名需要使用变量的字符截取功能时,则与上面的正好相反。 即:不能使用!!来引用变量,即使是在for中也是一样。