标题: [文本处理] 批处理for in (comand) 里有括号,该如何转义? [打印本页]
作者: tiandyoin 时间: 2023-2-20 14:06 标题: 批处理for in (comand) 里有括号,该如何转义?
像下面,文件路径中带有括号,在 for循环in语句中,如何转义括号,使得不提醒语法错误:
“此时不应有 \thunder。”- set "p1=C:\Program Files (x86)\thunder network\中 (1) 文\1.txt"
- for /f "eol=* delims=" %%i in ('"findstr /i /n .* "%p1%" "') do (
- .......
- )
复制代码
使用过失败的方法:
(1) set "p1=C:\Program Files ^(x86^)\thunder network\中 ^(1^) 文\1.txt"
(2) set "p1=C:\Program Files \^(x86\^)\thunder network\中 \^(1\^) 文\1.txt"
(3) set "p1=C:\Program Files ^(x86^)\thunder network\中 ^(1^) 文\1.txt"
for /f "usebackq eol=* delims=" %%i in (`"findstr /i /n .* "%p1%" " `) do (
作者: qixiaobin0715 时间: 2023-2-20 14:19
标定一下路径不就可以了:- cd /d "C:\Program Files (x86)\thunder network\中 (1) 文\"
- for /f ... ('findstr .* 1.txt')....
复制代码
作者: WHY 时间: 2023-2-20 14:30
for /f "usebackq eol=* delims=" %%i in (`"findstr /i /n .* "%p1%" " `) do (
红色是一对引号,蓝色是一对引号,%p1%刚好暴露在两对引号之外,引号失去了特殊字符转义的作用。
常规的办法:- for /f "eol=* delims=" %%i in ('findstr /i /n .* "%p1%"') do (
复制代码
作者: tiandyoin 时间: 2023-2-20 14:43
回复 2# qixiaobin0715
可是我想转义,就不想转移路径。
作者: tiandyoin 时间: 2023-2-20 14:48
回复 3# WHY
这是我最先的写法了,试过的不通过
作者: WHY 时间: 2023-2-20 14:59
回复 WHY
这是我最先的写法了,试过的不通过
tiandyoin 发表于 2023-2-20 14:48
我不信。
除非你用的不是windows系统。
作者: tiandyoin 时间: 2023-2-20 15:16
回复 3# WHY
你的办法,不把bat 文件放在那个目录里就行。
但换个复杂点的路径
"C:\Program Files (x86)\thunder network\1 (2 量子) 3 纠缠\"
然后把我的代码写在 "C:\Program Files (x86)\thunder network\1 (2 量子) 3 纠缠\test.bat"
一跑起来就提示 “此时不应该有 3”
作者: qixiaobin0715 时间: 2023-2-20 15:26
你把7楼出错的代码完整的贴出来,让大家看看。
作者: tiandyoin 时间: 2023-2-20 15:39
回复 6# WHY
这次对了,是我大意了,没有闪。其实问题不在 for 循环,是do里面的东西
set "s1=C:\program files(x86)"
set "s2=C:\Program Files (x86)\thunder network\1 (2 量子) 3 纠缠"
for ... do (
setlocal enabledelayedexpansion
rem 下面这一句出错了,
set var=!var:%s1%=%s2%!
)
%s1% 等还是没有延迟。
目前我想到一办法是:
call set var=%%var:!s1!=!s2!%%
可能还有潜在bug.
windows cmd 默认不按行逻辑顺序,让人真是防不胜防
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |