标题: [其他] [已解决]注释行导致批处理运行时出现异常 [打印本页]
作者: YJDP 时间: 2010-11-23 20:52 标题: [已解决]注释行导致批处理运行时出现异常
我写了一个批处理,针对公司部门电脑下载文件及清垃圾用的
在调式的时候发现 注释行导致批处理运行时出现异常的问题,不知道大家有没遇到
我有一段代码是需要从服务器上复制文件到本地,然后读取的操作
发现如果在FOR语句中嵌套了for 、if esle语句时
在嵌套中的“ :: ” 会影响到程序的运行
这个问题是今天才发现的,因此我今天写了新的代码后,发现批处理在运行时总是直接关掉,即运行出现了严重错误,可是写的代码在分割到新的批处理测试却又没有问题。
而是昨天写好运行无错的部分也出现了这种情况,让我非常头疼
最后才发现原来是注释惹的祸……
由于此问题和代码无关,我就不贴代码了
作者: YJDP 时间: 2010-11-23 21:02
在以下代码中
-
- if exist "%SFR%" (
- setlocal enabledelayedexpansion
- for /r %SFR% %%i in (%lastver%) do (
- set sf=%%~ti
- set updatefilename=%%i
-
- ::读版本文件,将每一行内容保存到变量line
- set n=0
- for /f "usebackq delims=" %%i in ("!updatefilename!") do call :readtxt %%i
- )
- )
复制代码
如果在 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 |