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

[文本处理] 批处理延迟变量里有迟延变量里有延迟变量,三层套娃,怎么写?

[复制链接]
发表于 2023-3-4 23:05:41 | 显示全部楼层 |阅读模式
在 CMD 里,如果我想使用在延迟变量里使用延迟变量,如下:


  1. @echo off
  2. set /p s1=Enter value for s1:
  3. set /p s2=Enter value for s2:

  4. rem Escape exclamation marks in s1 and s2
  5. set "s1=%s1:!=^^^!!%"
  6. set "s2=%s2:!=^^^!!%"

  7. cd.>3.out.txt
  8. for /f "delims=" %%j in ('findstr .* 3.txt') do (
  9.     (set "val=%%j")
  10.     setlocal enabledelayedexpansion
  11.         Set val=!val:%s1%=%s2%!
  12.         echo.!val!
  13.     endlocal
  14. ) >> 3.out.txt

  15. pause
  16. goto :eof
复制代码
一般 s1=abc 是可以的,但 s1 里面有特殊字符就出问题了,比如有特殊字符感叹号 ! 。如 s1 字面量是 !ab, 或 s1 字面量是 !a!bc
或 s1 字面量是 !a!b!c 或 s1 字面量是 !a!b!c!

这时我该怎么保证在 call 调用时, s1 里的感叹号不会被当成特殊字符进行求值呢,
或者简单说, 3.txt 内容里有三行字符串
!a!bc
!a!b!c
!a!b!c!
对 s1 的值,我输入 !a!b!c
对 s2 的值,我输入 !d!e!f!!!
要怎么确保 3.out.txt 内容为
!a!bc
!d!e!f!!!
!a!b!c!
chatgpt, 谢谢你刚才的结果,但是 3.out.txt 的内容还是和 3.txt 里一样。
感觉离正确答案很近了,但是我没法想通,卷太多层了
 楼主| 发表于 2023-3-4 23:16:03 | 显示全部楼层

  1. @echo off
  2. set /p s1=Enter value for s1:
  3. set /p s2=Enter value for s2:

  4. rem Escape exclamation marks in s1 and s2
  5. set "s1=%s1:!=^^^!!%"
  6. set "s2=%s2:!=^^^!!%"

  7. cd.>3.out.txt
  8. for /f "delims=" %%j in ('findstr .* 3.txt') do (
  9.     set "val=%%j"
  10.     call :replace val s1 s2
  11.     setlocal enabledelayedexpansion
  12.         echo.!val!
  13.     endlocal
  14. ) >> 3.out.txt

  15. pause
  16. goto :eof

  17. :replace <var> <search> <replace>
  18. setlocal enabledelayedexpansion
  19. for /f "tokens=1,* delims==" %%a in ('set %~1') do (
  20.     set "temp=%%b"
  21.     set "%~1=!temp:%~2=%~3!"
  22. )
  23. endlocal & set "%~1=%temp%"
  24. goto :eof
复制代码
回复 1# tiandyoin

chatgpt 又给我卷出这串代码,感觉要抓狂,但结果错的离谱
发表于 2023-3-5 12:08:54 | 显示全部楼层
看不懂你的需求是什么,你贴的代码和你的描述也不相符,建议不是你的代码就不用贴了,准确描述你的需求就行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 04:00 , Processed in 0.016743 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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