中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [讨论]请问诸位遇到过脱字符无效的情况没有?
« [1] [2] »
作者:
标题: [讨论]请问诸位遇到过脱字符无效的情况没有? 上一主题 | 下一主题
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『楼 主』:  [讨论]请问诸位遇到过脱字符无效的情况没有?

比如如下一段代码,当用延迟环境变量后,不管怎么设置都会出错误“此时不应有< ”!(垃圾ms,都不给点友好实际点的错误信息)。而没打开环境延迟时是正常的。

在这里,我试过,不管用几个脱字符都无法把<脱走了,郁闷了。
请问各位遇到过这种情况没有呢
setlocal enabledelayedexpansion
set part=stone
set nber=1

for /f "usebackq tokens=1,2 delims=        " %%i in (`sed -n -e '/^^^<p^^^>^^^<strong^^^>[0-9]/{s/.*href^^^=^^^"//^^^;s/^^^"^^^>/\t/^^^;s/^^^<\/a.*//^^^;/http/^^^!s/^^^/http:\/\/www.greatfirewall.com/^^^;p}' %part%-!nber!.html`) do (
echo %%i        %%j>>%part%-!nber!.txt
        )


endlocal


2008-2-20 17:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 2 楼』:  

叹号处理错误.这种时候极不建议使用变量延迟.
试着用其他方法
如for XXXXXXXX DO (
call :block "%%i"
)

2008-2-20 18:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 3 楼』:  

sed 命令应该用双引号括起来的,用单引号会报错。

另外,不需要使用usebackq和``,直接在for的in里面试试 ' " sed "...." filename " ' 。

   此帖被 +1 点积分    点击查看详情   
评分人:【 pooronce 分数: +1  时间:2008-2-21 10:48


2008-2-20 20:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by lxmxn at 2008-2-20 08:10 PM:
sed 命令应该用双引号括起来的,用单引号会报错。

另外,不需要使用usebackq和``,直接在for的in里面试试 ' " sed "...." filename " ' 。

谢谢
避免用双引号一是因为习惯问题,习惯了sed等几个命令用单引
另外呢,就是遇到过一套进双引号时脱字难确定的情况,不能确定到底哪些得脱哪些不脱了。 而用单引号好歹还知道哪些地方需要脱,虽然麻烦一点,但不用一个个去确定。

这里换用双引号倒是成功了:)


另回楼上兄弟,不用子程序调用是因为实际处理时遇到的part内容及文件名等名有空格及& 符,有时part里还有斜杠,这种情况下要传递这样的参数非常麻烦

2008-2-21 10:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 5 楼』:  



  Quote:
Originally posted by knoppix7 at 2008-2-20 06:04 PM:
叹号处理错误.这种时候极不建议使用变量延迟.
试着用其他方法
如for XXXXXXXX DO (
call :block "%%i"
)

另外请问,为什么极不建议使用变量延迟呢?
变量延迟除了叹号变义,还有其它什么值得注意的地方吗
另外为什么我这里不延迟正常的,一延迟后就出错,就算脱字符加到叹号前都不行呢

2008-2-21 11:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 6 楼』:  

另回楼上兄弟,不用子程序调用是因为实际处理时遇到的part内容及文件名等名有空格及& 符,有时part里还有斜杠,这种情况下要传递这样的参数非常麻烦


不是太麻烦.
call :block "%%i"

block里用%~1来去掉加的引号.



因为不知道要加多少 转义符.用功夫算转义符的话.block的方法都写完了..


就echo一下.拖2层.加2个..
蒙一下。你那个转义符至少是5个.

2008-2-21 11:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 7 楼』:  

一般FOR里面是加3个,不套FOR是加1个,习惯了直接全部替换就ok了

至于你说的加引号传递并使用,老早也就试过,上面提到过,里面包含有&符号,当用~脱掉引号时就出错了,总不能每次调用及赋值再检测里面的&符号替换成^&

2008-2-21 11:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 8 楼』:  

set "str=%~1"

2008-2-21 12:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by knoppix7 at 2008-2-21 12:51 PM:
set "str=%~1"

谢谢,还没发现可以这样赋值的:o

2008-2-21 13:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 10 楼』:  

个么顺路另外讨教一下,如果需要跳出for循环,你们一般怎么处理的呢。
麻烦再说说吧,谢谢

2008-2-21 13:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 11 楼』:  

goto呗

2008-2-21 14:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by slore at 2008-2-21 02:54 PM:
goto呗

这么说来没什么特殊命令或特殊处理方法好用的了?

另外一个常遇到的问题是,遇到带&符号的字符串要整合后输出到文件里,该怎办呢? 用echo 总是出错,加引号吧又容易出现配对问题。而且引号本又多了不好

2008-2-21 15:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 13 楼』:  

set /p "null=内容"<nul&echo+>>XX.txt

   此帖被 +2 点积分    点击查看详情   
评分人:【 pooronce 分数: +2  时间:2008-2-21 17:18


2008-2-21 17:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by knoppix7 at 2008-2-21 05:11 PM:
set /p "null=内容"<nul&echo+>>XX.txt

谢谢,真是好方法啊

2008-2-21 17:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 15 楼』:  

不过奇怪的是,用上set /p后虽然是能正常显示好了,但用你的命令却怎么都无法导向到文件中去了,不知道为啥呢。。。

2008-2-21 17:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: