标题: 批处理编写出错总结(还不是很完善,待续中) [打印本页]
作者: lqh3417 时间: 2009-12-12 12:32 标题: 批处理编写出错总结(还不是很完善,待续中)
转义:
嵌套语句中子语句如果出现特殊字符,一定要注意转义哦:
这是我的出错经验
1.来源:http://www.bathome.net/thread-6683-1-1.html
在for语句中:
如for %a in (C D) do dir /b %a: *.txt
这个语句中,*是特殊字符,要用^或者\来对它进行转义,变成
for %a in (C D) do dir /s /b %a:\*.txt
2.来源:http://www.bathome.net/thread-6644-1-1.html
在echo语句中,要输出type nul>abc.txt这段文本,其中>是特殊字符,
要变成
echo type nul^>abc.txt
作者: Batcher 时间: 2009-12-12 12:50
第一个里面的的\不是转义符
作者: lqh3417 时间: 2009-12-12 13:58
呃。。。想不明白哦。。。麻烦解释一下吧。
作者: lqh3417 时间: 2009-12-12 14:05
唉,连错误总结还是出错。
路径要紧贴着带有通配符的文件名的啊!
当我处于命令行C:\>时要查找D:下的txt文件( 不含子目录)
则应该输入dir/b D:*.txt
不能是dir/b D: *.txt (: 和*之间不能有空格的)
终于弄明白了!谢谢
作者: zqz0012005 时间: 2009-12-12 14:09
标题赶紧改掉吧!
这个活儿楼主目前是做不来的。
作者: lqh3417 时间: 2009-12-12 14:19
555,我只是想和大家分享一下自己实践中的一些出错的经验,况且也可以一起来分享的啊,又不是我一个人单干
作者: zqz0012005 时间: 2009-12-12 14:24
dir命令也支持多个参数,即可以同时列出多个指定的目标(文件夹和通配符)。目标之间用分隔符(如空格、分号等)分开,相当于对每个目标执行一次dir
dir /b D: *.txt
相当于
dir /b D: & dir /b *.txt
这里dir /b D: 并不等同于 dir /b D:\
不加\时表示指定驱动器中的当前目录,加\表示指定驱动器的根目录。
详情去找找老教学帖(标题大概是C:与C:\的区别)
当前目录、根目录、路径,通配符,位运算,字符编码……之类的,是计算机的基础知识,还不知道的重学《计算机基础》或百度一下。
作者: zqz0012005 时间: 2009-12-12 14:39 标题: 回复 6楼 的帖子
鼓励积极思考、动手实践、总结经验。
但你现在所说的总结其实只是批处理基础甚至有些是计算机基础。
与教程区的基础教学相比,你认为这样的总结有多大意义?
好比说老师在教1+1=2,你不去听讲非得自己掰手指头数出来,这样的进步虽有一定意义,但恐怕价值不大吧(甚至得不偿失)?
作者: batman 时间: 2009-12-12 18:06 标题: 回复 8楼 的帖子
在这里本人有点不同意思:
首先,我认为这种学习+总结的习惯是很不错的,不管其中的内容是否显得稚嫩,起码说明总结人在用心的学,这比起那些只问
不想的人在学习态度上来讲不知道要好了多少倍,所以我们要鼓励大家都养成总结的好习惯。
同时,任何一个人不是天生就会所有的知识,没有哪个婴儿知道1+1=2是不?所以,一个人要想获得真知,其中肯定是有一个过
程的。放在批处理上来讲,我们先学者就是要在鼓励学习者的基础上,引导其经过一个正确的过程而获取批处理技术和知识。切不要
因别人的进步甚微而心急,殊知:涓涓细流汇集终成大海,风云翻涌以至变幻。所以个人认为学批只要一天比一天有进步,哪怕是一
丁点的进步就是成功,如此长期坚持下去,批之学又有何难而不成?
以上皆为个人观点,如对zqz版主有任何的冒犯之处,还请见谅。
[ 本帖最后由 batman 于 2009-12-12 18:07 编辑 ]
作者: zqz0012005 时间: 2009-12-12 18:32 标题: 回复 9楼 的帖子
没啥哈,我只是觉得这个标题不合适。
楼主是分享自己的学习经验,这很好,我也说了鼓励这种行为。但用这个标题有点太夸大了。
作者: neorobin 时间: 2009-12-12 22:14 标题: else和( 之间没空格会错的
if ... else(....)-
- echo on&prompt $s$h&cls
- @echo set /a a=b+c 正常
- set /a a=b+c
- pause
- @echo (set /a a=b+c) 正常
- (set /a a=b+c)
- pause
- @echo set /a a=(b+c) 正常
- set /a a=(b+c)
- pause
- @echo set /a "a=(b+c)" 正常
- set /a "a=(b+c)"
- pause
- @echo (set /a "a=(b+c)") 正常
- (set /a "a=(b+c)")
- pause
- @echo (set /a a=(b+c)) 会出错
- pause
- (set /a a=(b+c))
- pause
复制代码
- echo on&prompt $s$h&cls
- set q=行尾空格问题
- set q1=%q%
- @if "%q%"=="%q1%" (echo 显示我表示 set q1=%q% 后面没有空白字符) else (echo 显示我表示 set q1=%q% 后面 有 空白字符)
- @echo 再看看 q 和 q1 两个变量实际的值和不同之处, 将用花括号括起它们实际的值
- @echo {q}={%q%}, {q1}={%q1%}
- @pause
复制代码
[ 本帖最后由 neorobin 于 2009-12-12 22:57 编辑 ]
作者: zqz0012005 时间: 2009-12-17 19:42 标题: 回复 11楼 的帖子
复合语句内部子语句的括号问题
http://bbs.verybat.org/viewthread.php?tid=10741
(set /a a=(b+c)) 与 (set /a a=(b+c)anything 效果是一样的
复合语句已经结束了,后面的字符没有用处。
改成 (set /a a=(b+c^)) 就OK了
作者: neorobin 时间: 2009-12-17 20:06 标题: 回复 12楼 的帖子
多谢并学习了, 不知 MS 有没有相关的资料, 害俺们辛苦琢磨这些
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |