|
|
在 CMD 里,如果我想使用在延迟变量里使用延迟变量,如下:
- @echo off
- set /p s1=Enter value for s1:
- set /p s2=Enter value for s2:
- rem Escape exclamation marks in s1 and s2
- set "s1=%s1:!=^^^!!%"
- set "s2=%s2:!=^^^!!%"
- cd.>3.out.txt
- for /f "delims=" %%j in ('findstr .* 3.txt') do (
- (set "val=%%j")
- setlocal enabledelayedexpansion
- Set val=!val:%s1%=%s2%!
- echo.!val!
- endlocal
- ) >> 3.out.txt
- pause
- 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 里一样。
感觉离正确答案很近了,但是我没法想通,卷太多层了 |
|