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

[文本处理] 批处理for in (comand) 里有括号,该如何转义?

像下面,文件路径中带有括号,在 for循环in语句中,如何转义括号,使得不提醒语法错误:
“此时不应有 \thunder。”
  1. set "p1=C:\Program Files (x86)\thunder network\中 (1) 文\1.txt"
  2. for /f "eol=* delims=" %%i in ('"findstr /i /n .* "%p1%" "') do (
  3. .......
  4. )
复制代码
使用过失败的方法:
(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 (

回复 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 默认不按行逻辑顺序,让人真是防不胜防

TOP

你把7楼出错的代码完整的贴出来,让大家看看。

TOP

回复 3# WHY


你的办法,不把bat 文件放在那个目录里就行。
但换个复杂点的路径   
"C:\Program Files (x86)\thunder network\1 (2 量子) 3 纠缠\"

然后把我的代码写在 "C:\Program Files (x86)\thunder network\1 (2 量子) 3 纠缠\test.bat"

一跑起来就提示 “此时不应该有 3”

TOP

回复  WHY


    这是我最先的写法了,试过的不通过
tiandyoin 发表于 2023-2-20 14:48



    我不信。
除非你用的不是windows系统。

TOP

回复 3# WHY


    这是我最先的写法了,试过的不通过

TOP

回复 2# qixiaobin0715


    可是我想转义,就不想转移路径。

TOP

for /f "usebackq eol=* delims=" %%i in (`"findstr /i /n .* "%p1%" " `) do (
红色是一对引号,蓝色是一对引号,%p1%刚好暴露在两对引号之外,引号失去了特殊字符转义的作用。
常规的办法:
  1. for /f "eol=* delims=" %%i in ('findstr /i /n .* "%p1%"') do (
复制代码

TOP

标定一下路径不就可以了:
  1. cd /d "C:\Program Files (x86)\thunder network\中 (1) 文\"
  2. for /f ... ('findstr .* 1.txt')....
复制代码

TOP

返回列表