qzwqzw (活着就是幸福)当前离线
贵宾
@echo off echo. echo. 已经确认命令连接符号优先级从低到高如下: echo. ^& 命令分隔符 echo. ^|^| 逻辑或操作符 echo. ^&^& 逻辑与操作符 echo. ^| 管道操作符 echo. ^< ^> ^>^> I/O重定向操作符 echo. ^(^) 命令分组 echo. echo.证明过程如下: pause echo. echo. 首先应当公认^(和^)作为命令分组符号有最高的优先级,可以改变任意命令组的优先级 echo. echo. 另外需要注意的是,命令连接符号的优先级与语句的执行顺序不是直接对应的 echo. echo. 命令行中的语句仍然是先执行左侧,再执行右侧 echo. echo. 命令连接符只影响左侧与右侧语句的分组过程,而不会使右侧语句先执行 echo. pause cls echo on echo flag1 | echo flag2 > con echo flag1 | (echo flag2 > con) (echo flag1 | echo flag2) > con @echo off echo. echo.前两句输出效果相同,说明第二句的分组符号可以省略,证明 ^> 优先级大于 ^| pause cls echo on echo flag1 && echo flag2 | echo flag3 echo flag1 && (echo flag2 | echo flag3) (echo flag1 && echo flag2) | echo flag3 @echo off echo. echo.前两句输出效果相同,说明第二句的分组符号可以省略,证明 ^| 优先级大于 ^&^& pause cls echo on echo flag1 || echo flag2 && echo flag3 echo flag1 || (echo flag2 && echo flag3) (echo flag1 || echo flag2) && echo flag3 @echo off echo. echo.前两句输出效果相同,说明第二句的分组符号可以省略,证明 ^&^& 优先级大于 ^|^| pause cls echo on echo flag1 || echo flag2 & echo flag3 (echo flag1 || echo flag2) & echo flag3 echo flag1 || (echo flag2 & echo flag3) @echo off echo. echo.前两句输出效果相同,说明第二句的分组符号可以省略,证明 ^|^| 优先级大于 ^& pause cls echo.综合测试示例: echo. echo on echo flag1 & more flag2 || echo flag3 && echo flag4 | echo flag5 || echo flag6 echo flag1 & ((more flag2 || (echo flag3 && (echo flag4 | echo flag5))) || echo flag6) (echo flag1 & (more flag2 || (echo flag3 && echo flag4) | echo flag5)) || echo flag6 @echo off echo. echo.前两句输出效果相同,说明符合优先级和分组优先级相同,第三句是个反例 pause复制代码
评分人数
wankoilz 当前离线
上尉
TOP
CrLf 当前离线
论坛巡查
(echo flag1 | echo flag2) > con复制代码
set =|find /c "" 2>nul (set =|find /c "") 2>nul set = 2>nul|find /c ""复制代码
plp626 当前离线
flag2♪◙复制代码
cmd/v call ascmap.cmd $ (echo;|echo off)>con&echo !$:~0,70!复制代码
(echo;|dir)>con复制代码
(echo;|set /p= )>con rem 长串空格为一个 tab 制表符复制代码
ENABLE_ECHO_INPUT 0x0004 ENABLE_EXTENDED_FLAGS 0x0080 ENABLE_INSERT_MODE 0x0020 ENABLE_LINE_INPUT 0x0002 ENABLE_MOUSE_INPUT 0x0010 ENABLE_PROCESSED_INPUT 0x0001 ENABLE_QUICK_EDIT_MODE 0x0040 ENABLE_WINDOW_INPUT 0x0008 ENABLE_PROCESSED_OUTPUT 0x0001 ENABLE_WRAP_AT_EOL_OUTPUT 0x0002复制代码
amwfjhh 当前离线
六级士官
让我想起了批处理内幕:句柄 那篇帖子了,后面有一个句柄转换后把con重新指给1句柄的,那里面就出现了cls控制字符的显示,看来根源也在这里。
(cls 1>&2)>nul pause (cls 1>&3)>nul pause复制代码
重定向句柄 N 时, 无法复制此句柄。复制代码