有人可以解释一下这个批处理文件吗?

时间:2017-01-05 11:40:25

标签: batch-file

我正在查看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

感谢所有人提前。

1 个答案:

答案 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"
    )

一个接一个。

  1. 对于命令(带/f开关),解析另一个命令的输出。在这种情况下,它采用分割的第一个和第二个子字符串#结果
  2. prompt #$H#$E#将转义和退格字符(由#分隔)设置为提示(选中prompt /?),echo on使其可见。
  3. for %%b in (1) do rem除了更多内容外,还会打印提示,以便进行处理。
  4. 所有内容都放在双引号中,因此不需要转义&
  5. 结果外部FOR命令处理字符串#backspace#escape#
  6. 最后将退格分配给del变量。
  7. 其余的是用于着色的子程序。

    它使用一种名为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是批处理脚本中的半传奇 - 这里的大部分技巧都是他的发明)