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

[文本处理] 批处理中如何用set对=等号进行替换

[复制链接]
 楼主| 发表于 2014-12-6 02:18:23 | 显示全部楼层
回复 15# CrLf


    你举这个例子也从侧面印证了/f时对括号里面的判断,首字节为'时识别为命令,即使里面是一个“看起来是标准字符串”的字符串,带引号字符串与不带引号字符串具有同等效力,只要包含正确命令,都会被执行,区别只是第二句命令被双引号包起来,所以对其中的特殊符号进行了转义,=不再作为分割符。但是echo后的第一字节,[,;= ]等组合还是会被识别成切割符(这是构成命令的要素),不管在双引号内与否,因为这句的最外层是',里面有符合命令特征的,就先按语法解析了。

把几句放到一起看或许更能说明问题,出错在语法解析这一步上:预处理给出了一个可以显示的结果(兼具了命令与字符串二者的特征),但在语法解析时出了问题,既给出了可见回显,又提示文件错误……

  1. prompt $
  2. echo on
  3. for /f "delims=" %%a in ('echo;=E5=AE=89=E8=A1=A3=E6=9F=9C=E9=97=A8=E5=B8=88=E5=82=85') do echo,%%a
  4. for /f "delims=" %%a in ('"echo+=E5=AE=89=E8=A1=A3=E6=9F=9C=E9=97=A8=E5=B8=88=E5=82=85"') do echo,%%a
  5. for /f "delims=" %%a in ("=E5=AE=89=E8=A1=A3=E6=9F=9C=E9=97=A8=E5=B8=88=E5=82=85") do echo,%%a
  6. for /f "delims=" %%a in (^"=E5=AE=89=E8=A1=A3=E6=9F=9C=E9=97=A8=E5=B8=88=E5=82=85^") do echo,%%a

  7. pause
复制代码
 楼主| 发表于 2014-12-6 02:26:28 | 显示全部楼层
擦喇!灵异事件。
第三个FOR存在时,第四个FOR不报错;第三个FOR用REM注释起来时,第四个FOR就会报找不到文件错误。
彻底凌乱了……
发表于 2016-9-8 13:10:26 | 显示全部楼层
  1. mshta http://bathome.net/s/hta "type('list.txt').replace(/[^:\r\n]+(?=([\r\n]|$))/g, function($0){return decodeURIComponent($0.replace(/=/g,'%%'))})"
  2. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 05:38 , Processed in 0.014479 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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