找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26293|回复: 6

[其他] 变量替换引号和替换其他字符不能写在同一行

[复制链接]
发表于 2011-6-3 01:19:36 | 显示全部楼层 |阅读模式
本帖最后由 随风 于 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
复制代码
发表于 2011-6-3 02:46:31 | 显示全部楼层
存在奇数个引号时会造成错误配对,由于双引号之内的特殊字符(分隔符、连接符、转义符)会被转义,所以只能在引号对之外把奇数个双引号转义,也就是说,解决办法是把第一个(或者第奇数个)引号转义即可避免引号的错误划分
发表于 2011-6-3 09:45:26 | 显示全部楼层
xpsp3用户表示有这个问题存在。。。
发表于 2011-6-3 09:47:07 | 显示全部楼层
引号替换是要加转意^
而且替换时变量外不要加引号
比如你这样写就没问题了
  1. set var=!var:^"=!&set "var=!var:&rdquo=!"&set "var=!var:&ldquo=!"
复制代码
 楼主| 发表于 2011-6-3 11:17:37 | 显示全部楼层
我的是win7  
以前用xp-sp2好像没有这个现象
发表于 2011-6-3 11:37:31 | 显示全部楼层
你们讨论的是直接运行贴出的代码还是说把第六七行改一行运行呢
发表于 2011-6-3 18:32:29 | 显示全部楼层
总结了一下,做个备注。
  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
复制代码

评分

参与人数 1技术 +1 收起 理由
zm900612 + 1 用换行符的想法真好

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 11:48 , Processed in 0.018317 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表