中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-27 20:35
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [讨论]请问诸位遇到过脱字符无效的情况没有? 查看 1,517 回复 17
楼 主 [讨论]请问诸位遇到过脱字符无效的情况没有? 发表于 2008-02-20 17:16 ·  中国 上海 黄浦区 电信
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
比如如下一段代码,当用延迟环境变量后,不管怎么设置都会出错误“此时不应有< ”!(垃圾ms,都不给点友好实际点的错误信息)。而没打开环境延迟时是正常的。

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


setlocal enabledelayedexpansion
set part=stone
set nber=1

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


endlocal
2 发表于 2008-02-20 18:04 ·  中国 北京 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
叹号处理错误.这种时候极不建议使用变量延迟.
试着用其他方法
如for XXXXXXXX DO (
call :block "%%i"
)
3 发表于 2008-02-20 20:10 ·  中国 湖北 武汉 江岸区 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线
sed 命令应该用双引号括起来的,用单引号会报错。

另外,不需要使用usebackq和``,直接在for的in里面试试 ' " sed "...." filename " ' 。
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pooronce +1 2008-02-21 10:48
4 发表于 2008-02-21 10:51 ·  中国 上海 黄浦区 电信
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
Originally posted by lxmxn at 2008-2-20 08:10 PM:
sed 命令应该用双引号括起来的,用单引号会报错。

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


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

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


另回楼上兄弟,不用子程序调用是因为实际处理时遇到的part内容及文件名等名有空格及& 符,有时part里还有斜杠,这种情况下要传递这样的参数非常麻烦
5 发表于 2008-02-21 11:02 ·  中国 上海 黄浦区 电信
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
Originally posted by knoppix7 at 2008-2-20 06:04 PM:
叹号处理错误.这种时候极不建议使用变量延迟.
试着用其他方法
如for XXXXXXXX DO (
call :block "%%i"
)


另外请问,为什么极不建议使用变量延迟呢?
变量延迟除了叹号变义,还有其它什么值得注意的地方吗
另外为什么我这里不延迟正常的,一延迟后就出错,就算脱字符加到叹号前都不行呢
6 发表于 2008-02-21 11:33 ·  中国 北京 海淀区 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
另回楼上兄弟,不用子程序调用是因为实际处理时遇到的part内容及文件名等名有空格及& 符,有时part里还有斜杠,这种情况下要传递这样的参数非常麻烦


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

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



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


就echo一下.拖2层.加2个..
蒙一下。你那个转义符至少是5个.
7 发表于 2008-02-21 11:55 ·  中国 上海 黄浦区 电信
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
一般FOR里面是加3个,不套FOR是加1个,习惯了直接全部替换就ok了

至于你说的加引号传递并使用,老早也就试过,上面提到过,里面包含有&符号,当用~脱掉引号时就出错了,总不能每次调用及赋值再检测里面的&符号替换成^&
8 发表于 2008-02-21 12:51 ·  中国 北京 海淀区 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
set "str=%~1"
9 发表于 2008-02-21 13:37 ·  中国 上海 黄浦区 电信
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
Originally posted by knoppix7 at 2008-2-21 12:51 PM:
set "str=%~1"


谢谢,还没发现可以这样赋值的:o
10 发表于 2008-02-21 13:44 ·  中国 上海 黄浦区 电信
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
个么顺路另外讨教一下,如果需要跳出for循环,你们一般怎么处理的呢。
麻烦再说说吧,谢谢
11 发表于 2008-02-21 14:54 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
goto呗
12 发表于 2008-02-21 15:29 ·  中国 上海 黄浦区 电信
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
Originally posted by slore at 2008-2-21 02:54 PM:
goto呗


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

另外一个常遇到的问题是,遇到带&符号的字符串要整合后输出到文件里,该怎办呢? 用echo 总是出错,加引号吧又容易出现配对问题。而且引号本又多了不好
13 发表于 2008-02-21 17:11 ·  中国 北京 海淀区 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
set /p "null=内容"<nul&echo+>>XX.txt
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pooronce +2 2008-02-21 17:18
14 发表于 2008-02-21 17:19 ·  中国 上海 黄浦区 电信
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
Originally posted by knoppix7 at 2008-2-21 05:11 PM:
set /p "null=内容"<nul&echo+>>XX.txt


谢谢,真是好方法啊
15 发表于 2008-02-21 17:41 ·  中国 上海 黄浦区 电信
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
不过奇怪的是,用上set /p后虽然是能正常显示好了,但用你的命令却怎么都无法导向到文件中去了,不知道为啥呢。。。
论坛跳转: