1

我想为helpWindows cmd 中的所有命令制作帮助生成器并将其写入单独的文件。所以你在问/?help输入cmd时列表中的所有命令。这是我的代码的主要部分:

rem mypath - it's a folder where I put my results
rem In help all command are written by capitals letters
for /f "tokens=1 usebackq" %%i in (`help^|findstr /B /R "[QWERTYUIOPASDFGHJKLZXCVBNM][QWERTYUIOPASDFGHJKLZXCVBNM]"`) do (
  if NOT "%%i"=="GRAFTABL" (
    if NOT "%%i"=="DISKPART" (
      if NOT "%%i"=="SC" (
        help %%i > !mypath!\%%i.txt
      )
    )
  )
)

我在我的常规 exp 中使用 [Q..M] 中的所有序列,因为只有一组 [AZ] 存在一些问题但问题是在我的 FOR 和 IF 文件中 - 有 REM 命令的帮助。有谁知道为什么会这样?要修复它,我使用:

FOR/? >%mypath%\FOR.txt
IF/? >%mypath%\IF.txt

但我不明白为什么会这样。

4

2 回答 2

2

您在问题中发布的代码为我提供了正确的结果(甚至在我重新格式化之前)。

请参阅为什么 findstr 不能正确处理大小写(在某些情况下)?了解为什么 [AZ] 不能与 FINDSTR 一起正常工作。有关已知 FINDSTR 怪癖的详尽列表,请参阅Windows FINDSTR 命令有哪些未记录的功能和限制?

过滤命令名称的更好方法是查找以至少一个非空格字符开头的行,然后是任意数量的其他非空格字符,然后是 2 个空格。

如果您想忽略某些命令,您可以简单地使用带有 /V 选项的附加 FINDSTR。

该解决方案成为一个合理的单行程序,可以在没有批处理脚本的情况下从命令提示符运行:

for /f %A in ('help^|findstr /rc:"^[^ ][^ ]*  "^|findstr /v "GRAFTABL DISKPART SC"') do @help %A >%A.txt

或者作为可以插入脚本的代码:

for /f %%A in (
  'help^|findstr /rc:"^[^ ][^ ]*  "^|findstr /v "GRAFTABL DISKPART SC"'
) do help %%A >"!mypath!\%%A.txt"


编辑 - 2015-10-11

For在我的英语机器上,HELP 输出的第一行和最后一行以单词(大小写混合)开头。这个词恰好是一个有效的帮助命令,所以 FOR.TXT 文件被创建了 3 次。

我认为所有语言的第一行和最后一行都使用大小写混合。不难改进 FINDSTR 过滤器以排除第二个字符是空格或小写字符的任何行:

for /f %A in ('help^|findstr /rvc:"^.[abcdefghijklmnopqrstuvwxyz ]"^|findstr /v "GRAFTABL DISKPART SC"') do @help %A >%A.txt
于 2013-10-15T14:19:55.017 回答
1

我无法重现您的问题,但这对我来说是正确的,我找到了一个更简单的正则表达式:

@echo off
for /f %%i in ('help^|findstr /B /R [A-Z][^^^^o]') do (
if NOT "%%i"=="GRAFTABL" (
    if NOT "%%i"=="DISKPART" (
        if NOT "%%i"=="SC" (
            help %%i > %%i.txt
            )
        )
    )
)
于 2013-10-14T16:38:39.323 回答