Board logo

标题: 批处理编写出错总结(还不是很完善,待续中) [打印本页]

作者: 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(....)
  1. echo on&prompt $s$h&cls
  2. @echo set /a a=b+c 正常
  3. set /a a=b+c
  4. pause
  5. @echo (set /a a=b+c) 正常
  6. (set /a a=b+c)
  7. pause
  8. @echo set /a a=(b+c) 正常
  9. set /a a=(b+c)
  10. pause
  11. @echo set /a "a=(b+c)" 正常
  12. set /a "a=(b+c)"
  13. pause
  14. @echo (set /a "a=(b+c)") 正常
  15. (set /a "a=(b+c)")
  16. pause
  17. @echo (set /a a=(b+c)) 会出错
  18. pause
  19. (set /a a=(b+c))
  20. pause
复制代码
  1. echo on&prompt $s$h&cls
  2. set  q=行尾空格问题
  3. set q1=%q%
  4. @if "%q%"=="%q1%" (echo 显示我表示 set q1=%q% 后面没有空白字符) else (echo 显示我表示 set q1=%q% 后面 有 空白字符)
  5. @echo 再看看 q 和 q1 两个变量实际的值和不同之处, 将用花括号括起它们实际的值
  6. @echo {q}={%q%}, {q1}={%q1%}
  7. @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://bbs.bathome.net/) Powered by Discuz! 7.2