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

[其他] 【救助】请教一个关于SET命令执行替换时遇到的问题

[复制链接]
发表于 半小时前 | 显示全部楼层 |阅读模式
本帖最后由 87zrjojo 于 2026-8-28 13:42 编辑

我在测试一个批处理时,遇到一个奇葩的问题,我想通过SET命令将单个引号 " 替换为多个引号,发现在未开启变量延迟时能正常替换,但如果开启变量延迟并使用 ! 引用变量执行替换时,就会出错。这是个什么原理,大家帮忙解答一下。以下是我测试的代码

  1. @ECHO OFF
  2. set argv="test"

  3. REM x分别设置1-4进行测试
  4. set x=4

  5. REM 方式一:不开启变量延迟时
  6. IF "%x%"=="1" (set argv=%argv:"="""%)
  7. IF "%x%"=="2" (set argv=%argv:"=""%)
  8. echo argv=%argv% 测试x=1或x=2都没问题

  9. REM 方式二:开启变量延迟且使用!引用变量时
  10. SETLOCAL ENABLEDELAYEDEXPANSION
  11. IF "%x%"=="3" (set argv=!argv:"="""!)
  12. IF "%x%"=="4" (set argv=!argv:"=""!)
  13. echo argv=%argv% 测试x=3没问题,但x=4会闪退

  14. REM x=4时,如果使用%引用变量不会有问题(比如set argv=%argv:"=""%)
  15. REM 如果改为set argv=!argv:^"=""!,测试也正常的,这是个什么原理?

  16. pause
复制代码


上面代码,在x=4时就会一闪而过,肯定是代码出错了,这时我在替换时将引号转义^”一下就执行正确了,这是为什么?什么原理!

在代码中难免不了会使用!var!变量延迟,但上面的示例也真是奇葩,在不同环境下行为表现不一致,我是在win7中测试的,不知其它系统中是不是也这样?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-28 14:25

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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