Board logo

标题: [其他] 变量替换引号和替换其他字符不能写在同一行 [打印本页]

作者: 随风    时间: 2011-6-3 01:19     标题: 变量替换引号和替换其他字符不能写在同一行

本帖最后由 随风 于 2011-6-3 02:19 编辑

遇到这个问题,不解中
a.txt
  1. varvar:&rdquo
  2. r:“hjf
  3. abc"i
复制代码
将for中三个set 写一行就无法替换,显示:&rdquo不是内部命令
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3.    set "var=%%a"
  4.    setlocal enabledelayedexpansion
  5.    set "var=!var:"=!"
  6.    set "var=!var:&rdquo=!"&set "var=!var:&ldquo=!"
  7.    echo !var!
  8. )
  9. pause
复制代码

作者: CrLf    时间: 2011-6-3 02:46

存在奇数个引号时会造成错误配对,由于双引号之内的特殊字符(分隔符、连接符、转义符)会被转义,所以只能在引号对之外把奇数个双引号转义,也就是说,解决办法是把第一个(或者第奇数个)引号转义即可避免引号的错误划分
作者: batman    时间: 2011-6-3 09:45

xpsp3用户表示有这个问题存在。。。
作者: 601997526    时间: 2011-6-3 09:47

引号替换是要加转意^
而且替换时变量外不要加引号
比如你这样写就没问题了
  1. set var=!var:^"=!&set "var=!var:&rdquo=!"&set "var=!var:&ldquo=!"
复制代码

作者: 随风    时间: 2011-6-3 11:17

我的是win7  
以前用xp-sp2好像没有这个现象
作者: 601997526    时间: 2011-6-3 11:37

你们讨论的是直接运行贴出的代码还是说把第六七行改一行运行呢
作者: plp626    时间: 2011-6-3 18:32

总结了一下,做个备注。
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3.    set "var=%%a"
  4.    setlocal enabledelayedexpansion
  5.    set "var=!var:"=!"
  6.       set "var=!var:&rdquo=!"&set "var=!var:&ldquo=!"
  7.    echo !var!
  8.    endlocal
  9. )
  10. pause
  11. @echo off&set lf=^
  12. for /f "delims=" %%a in (a.txt) do (
  13.    set "var=%%a"
  14.    setlocal enabledelayedexpansion
  15. %换行符法%      set "var=!var:"=!"%lf%set "var=!var:&rdquo=!"&set "var=!var:&ldquo=!"
  16.    echo !var!
  17.    endlocal
  18. )
  19. pause
  20. for /f "delims=" %%a in (a.txt) do (
  21.    set "var=%%a"
  22.    setlocal enabledelayedexpansion
  23. %首引号转义法%      set ^"var=!var:"=!"&set "var=!var:&rdquo=!"&set "var=!var:&ldquo=!"
  24.    echo !var!
  25.    endlocal
  26. )
  27. pause
  28.    set "quot=""
  29.    for /f "delims=" %%a in (a.txt) do (
  30.    set "var=%%a"
  31.    setlocal enabledelayedexpansion
  32.    for %%q in (!quot!)do (
  33. %for变量法%       set "var=!var:%%q=!"&set "var=!var:&rdquo=!"&set "var=!var:&ldquo=!"
  34.    )
  35.    echo !var!
  36.    endlocal
  37. )
  38. pause
复制代码





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