Board logo

标题: [讨论]请问诸位遇到过脱字符无效的情况没有? [打印本页]

作者: pooronce     时间: 2008-2-20 17:16    标题: [讨论]请问诸位遇到过脱字符无效的情况没有?

比如如下一段代码,当用延迟环境变量后,不管怎么设置都会出错误“此时不应有< ”!(垃圾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

作者: knoppix7     时间: 2008-2-20 18:04
叹号处理错误.这种时候极不建议使用变量延迟.
试着用其他方法
如for XXXXXXXX DO (
call :block "%%i"
)
作者: lxmxn     时间: 2008-2-20 20:10
sed 命令应该用双引号括起来的,用单引号会报错。

另外,不需要使用usebackq和``,直接在for的in里面试试 ' " sed "...." filename " ' 。
作者: pooronce     时间: 2008-2-21 10:51


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

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

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

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


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


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

另外请问,为什么极不建议使用变量延迟呢?
变量延迟除了叹号变义,还有其它什么值得注意的地方吗
另外为什么我这里不延迟正常的,一延迟后就出错,就算脱字符加到叹号前都不行呢
作者: knoppix7     时间: 2008-2-21 11:33
另回楼上兄弟,不用子程序调用是因为实际处理时遇到的part内容及文件名等名有空格及& 符,有时part里还有斜杠,这种情况下要传递这样的参数非常麻烦


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

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



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


就echo一下.拖2层.加2个..
蒙一下。你那个转义符至少是5个.
作者: pooronce     时间: 2008-2-21 11:55
一般FOR里面是加3个,不套FOR是加1个,习惯了直接全部替换就ok了

至于你说的加引号传递并使用,老早也就试过,上面提到过,里面包含有&符号,当用~脱掉引号时就出错了,总不能每次调用及赋值再检测里面的&符号替换成^&
作者: knoppix7     时间: 2008-2-21 12:51
set "str=%~1"
作者: pooronce     时间: 2008-2-21 13:37


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

谢谢,还没发现可以这样赋值的:o
作者: pooronce     时间: 2008-2-21 13:44
个么顺路另外讨教一下,如果需要跳出for循环,你们一般怎么处理的呢。
麻烦再说说吧,谢谢
作者: slore     时间: 2008-2-21 14:54
goto呗
作者: pooronce     时间: 2008-2-21 15:29


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

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

另外一个常遇到的问题是,遇到带&符号的字符串要整合后输出到文件里,该怎办呢? 用echo 总是出错,加引号吧又容易出现配对问题。而且引号本又多了不好
作者: knoppix7     时间: 2008-2-21 17:11
set /p "null=内容"<nul&echo+>>XX.txt
作者: pooronce     时间: 2008-2-21 17:19


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

谢谢,真是好方法啊
作者: pooronce     时间: 2008-2-21 17:41
不过奇怪的是,用上set /p后虽然是能正常显示好了,但用你的命令却怎么都无法导向到文件中去了,不知道为啥呢。。。
作者: knoppix7     时间: 2008-2-21 17:46
那就在<nul后面加一个 >>XX.txt
作者: pooronce     时间: 2008-2-21 17:49
nul后面加试过
不过在echo off的情况下还能用吗。。。
作者: pooronce     时间: 2008-2-21 17:51
哦,试过了,能用,谢谢