Board logo

标题: [其他] [已解决]注释行导致批处理运行时出现异常 [打印本页]

作者: YJDP    时间: 2010-11-23 20:52     标题: [已解决]注释行导致批处理运行时出现异常

我写了一个批处理,针对公司部门电脑下载文件及清垃圾用的
在调式的时候发现 注释行导致批处理运行时出现异常的问题,不知道大家有没遇到

我有一段代码是需要从服务器上复制文件到本地,然后读取的操作

发现如果在FOR语句中嵌套了for 、if esle语句时
在嵌套中的“ :: ” 会影响到程序的运行


这个问题是今天才发现的,因此我今天写了新的代码后,发现批处理在运行时总是直接关掉,即运行出现了严重错误,可是写的代码在分割到新的批处理测试却又没有问题。
而是昨天写好运行无错的部分也出现了这种情况,让我非常头疼
最后才发现原来是注释惹的祸……


由于此问题和代码无关,我就不贴代码了
作者: YJDP    时间: 2010-11-23 21:02

在以下代码中

  1. if exist "%SFR%" (
  2.     setlocal enabledelayedexpansion
  3.     for /r %SFR% %%i in (%lastver%) do (
  4.         set sf=%%~ti
  5.      set updatefilename=%%i
  6.    
  7.   ::读版本文件,将每一行内容保存到变量line
  8.   set n=0
  9.   for /f "usebackq delims=" %%i in ("!updatefilename!") do call :readtxt %%i
  10.   )
  11. )
复制代码


如果在 set sf=%%~ti  这句前写了注释就必定出错,可能这是原为换行后批处理没有检测到有效代码的问题(空行也是会出错),但注释不是会被直接无视掉的吗。。。为什么却会当成空行?

奇怪的是,像图1、2那种情况,for语句里的2个独立的语句中间进行注释,也是会出错,真不明白。。。
作者: cjiabing    时间: 2010-11-23 22:39

你真厉害,可以申请世界纪录了!~
::原本不是用作注释的,去翻翻dos手册,用作注释的命令是rem,而且是在批处理文件中才使用。
作者: YJDP    时间: 2010-11-24 00:26     标题: 哈~原来是这样啊!

嘿嘿,最近兴趣来了刚学批处理~还有很多东西不懂

可是我到网上和百度百科查的都是下面这个解释
而按这上面的意思,::比rem更好用……


rem 命令
  注释命令,类似于在C语言中的/*--------*/,它并不会被执行,只是起一个注释的作用,便于别人阅读   和你自己日后修改。   :: 也具有rem的功能   但::和rem还是有区别的,当关闭回显时,rem和::后的内容都不会显示。  顺序批处理
但是当打开回显时,rem和rem   后的内容会显示出来,然而::后的内容仍然不会显示。

请问 :: 在DOS是作什么用的,因为实在没搜到=。=
请赐教~~

[ 本帖最后由 YJDP 于 2010-11-24 00:35 编辑 ]
作者: wc726842270    时间: 2010-11-24 04:53

好像是namejm大大的作品,链接已经忘了(因为一直在手机中,所以没在意)
批处理的段注释有一种比较常用的方法:


     goto start
      = 可以是多行文本,
      = 可以包含重定向符号和其他特殊字符
      = 只要不包含 :start 这一行
     :start


  另外,还有其他各种注释形式,比如:
        1、:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)
        2、rem 注释内容(不能出现重定向符号和管道符号)
        3、echo 注释内容(不能出现重定向符号和管道符号)〉nul
        4、if not exist nul 注释内容(不能出现重定向符号和管道符号)
        5、:注释内容(注释文本不能与已有标签重名)
        6、%注释内容%(可以用作行间注释,不能出现重定向符号和管道符号)
        7、goto 标签 注释内容(可以用作说明goto的条件和执行内容)
        8、:标签 注释内容(可以用作标签下方段的执行内容)




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2