首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

WindowsBatch与LinuxShell比较[batch常见异常]

2013-01-23 
WindowsBatch与LinuxShell比较[batch常见错误]WindowsBatch与LinuxShell比较[batch常见错误]pauserem 运行

WindowsBatch与LinuxShell比较[batch常见错误]

WindowsBatch与LinuxShell比较[batch常见错误]

pause
rem 运行结果是“5比40大!”


比较一下这两段代码,其差别就在引号“""”上。即当变量没被引号括起来的时候进行的是数字的比较;而被引号括起来就是进行字符串的比较(比较字符串时当然5比40大)。

三 if中注意空变量
@echo off
set hero=
if %hero% equ 1 (echo 正确!) else (echo 错误!)
pause

错了吗?

答:错了。此时变量hero的值为空,即if语句相当于“if equ 1 (echo 正确!) else (echo 错误!)”,equ前面没有东西,当然不对。

解决方法:加上引号,即“if "%hero%" equ "1" (echo 正确!) else (echo 错误!)”

四 errorlevel使用的错误。

@echo off
find "hero" 1.txt
if errorlevel 0 echo 找到了!&goto next
if errorlevel 1 echo 没找到!&goto next
:next
pause

错了吗?

答:错了!这样写无论1.txt中有没有字符串“hero”都会显示“找到了!”。
原因是“if errorlevel 0 echo 找到了!&goto next”这句相当于“if %errorlevel% gtr 0 echo 找到了!&goto next”。因此错误码大的一定要写在前面。

五重定向的问题
如果你要向一个文件中写入数字1,也许你会这样写:

@echo off
echo 1>hero.txt
pause

但这样写是错误的,因为这里的数字1有其它用途--代表了
标准输出流。

一般情况下不要用个位数直接接重定向符号。

那么如何解决这个问题呢?我们可以换另外一种格式:

@echo off
>hero.txt echo 1

pause

?

六 罪恶的双引号
双引号在单个使用的时候非常容易犯错误。“"”后面的字符串在第二个“"”出现之前都会被当成一般字符!

@echo off
if hero==hero (echo hero is me")
pause

这段代码运行不成功,原因是引号后面的括号“)”被当作是一般字符了。


@echo off
echo hero is me"&pause
pause

这段代码也出乎了我们的意料,原因是引号后面的&被当作是一般字符了。

批处理中双引号的优先级比较高,但低于百分号,也就是说双引号中的百分号不会被识别为普通字符。

七 罪恶的空格,空格不能随便乱用,定义变量的时候不要再等号前后加空格,还有很多的情况都需注意。

八 续行符
想必大家都知道符号“^”是作为去掉后续符号特殊意义的前导符。“^”还可以作为续行符,就是指出下一行是所在行的延续。

举个简单的例子:
@echo off
echo 英雄^
是^
好^
男人
pause

九 再看重定向
我们知道一个创建快捷方式的方法:
echo [InternetShortcut] >>a.url
echo URL=c:\windows\system32\notepad.exe >>a.url
echo IconIndex=20 >>a.url
echo IconFile=C:\windows\system32\shell32.dll >>a.url
是不是觉得代码中每一句都要加上“>>a.url”很繁琐。其实有一个简单的方法:
(
echo [InternetShortcut]
echo URL=c:\windows\system32\notepad.exe
echo IconIndex=20
echo IconFile=C:\windows\system32\shell32.dll
)>a.url

完!

?

感谢,Thanks!

作者:iTech
出处:http://itech.cnblogs.com/

热点排行