Board logo

标题: [其他] 批处理中以下括号里面的^|是什么意思?求老师解答 [打印本页]

作者: ll36912    时间: 2024-5-3 01:05     标题: 批处理中以下括号里面的^|是什么意思?求老师解答

  1. for /f %%i in ('ipconfig ^| fond "IPv4"') do set a=%%i
  2. echo %a%
复制代码

作者: Batcher    时间: 2024-5-3 08:48

回复 1# ll36912


    http://bbs.bathome.net/thread-1290-2-1.html#pid6306
作者: aloha20200628    时间: 2024-5-3 12:42

本帖最后由 aloha20200628 于 2024-5-3 12:44 编辑

回复 1# ll36912

批处理脚本解释器cmd.exe对复合语块(如for.../if.../(...)/...&...等)是先完成预处理再予执行,预处理过程要扫描语块中每个字段,其中遇到%var%类型变量则完成预先赋值,对未被双引号包裹的字段则要处理其中的^转义符,即完成其后字符(通常是cmd语义字符)的转义... 示例如下:
  1. for /f "delims=" %%a in (' "dir /b/a-d | findstr .txt" ') do echo,%%a
复制代码
预处理扫描以上复合语块时,遭遇被双引号包裹的参数字符串,则只对其中可能包含的%var%类型变量赋值,而不作^转义处理,故双引号内无须用^转义符
  1. for /f delims^= %%a in (' dir /b/a-d ^| findstr .txt ') do echo,%%a
复制代码
预处理扫描以上复合语块时,遭遇未被双引号包裹的参数字符串,不仅对其中可能包含的%var%类型变量赋值,还要作^转义处理,转义后 ^= 变为 =,而 ^| 变为 | 。

以上预处理过程可开启 echo on 之后查看和验证代码运行状态信息...
反言之,也可用以下会被报错的两行代码来验证上述预处理规则:
  1. for /f "delims^=" %%a in (' "dir /b/a-d ^| findstr .txt" ') do echo,%%a
复制代码
  1. for /f delims= %%a in (' dir /b/a-d | findstr .txt ') do echo,%%a
复制代码

作者: ll36912    时间: 2024-5-4 10:39

回复 2# Batcher

感谢你的回答




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2