我正在查看jeb创建的批处理文件。 [HERE]有人能解释一些事情吗?
喜欢,功能是什么
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do
set "param=^%~2" !
和set "param=!param:"=\"!"
和findstr /p /A:%1 "." "!param!\..\X" nul
是什么意思?
完整代码:
@echo off
setlocal EnableDelayedExpansion
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
rem Prepare a file "X" with only one dot
<nul > X set /p ".=."
call :color 07 "Premi un"
call :color 0a " tasto "
call :color 07 "per continuare..."
pause
:color
set "param=^%~2" !
set "param=!param:"=\"!"
findstr /p /A:%1 "." "!param!\..\X" nul
<nul set /p ".=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%"
exit /b
感谢所有人提前。
答案 0 :(得分:2)
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
一个接一个。
/f
开关),解析另一个命令的输出。在这种情况下,它采用分割的第一个和第二个子字符串#
结果prompt #$H#$E#
将转义和退格字符(由#
分隔)设置为提示(选中prompt /?
),echo on
使其可见。for %%b in (1) do rem
除了更多内容外,还会打印提示,以便进行处理。&
。#backspace#escape#
del
变量。其余的是用于着色的子程序。
它使用一种名为rogue exclamation
的简单技术,用于安全地分配包含特殊字符的字符串。
在第二行,它用"
替换\"
- 这是findstr所需的引号的转义。
行<nul > X set /p ".=."
创建一个文件X
,其中包含单个点且没有行尾字符(请参阅here)。稍后将通过FINDSTR命令搜索该文件。
然后是着色 - 尝试例如findstr /p /A:05 "." "something\..\X" nul
。这将在具有相对路径的文件中搜索一个点(在这种情况下已经创建了X),并将为该文件的路径着色。
<nul set /p ".=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%"
。最后使用它。它将打印退格字符(同样不使用新行),因此它将删除在为文本着色的findstr行中不需要的数据。findstr
中的好处是它独立于&#着色文本39,全球&#39;控制台颜色(与color
命令不同)
总之,这几乎在每一行都使用了未记录的黑客,这就是为什么阅读如此困难(Jeb是批处理脚本中的半传奇 - 这里的大部分技巧都是他的发明)