生成帮助文件

时间:2013-10-14 15:36:38

标签: windows command-line cmd

我想在Windows cmd中的help中为所有命令创建帮助生成器,并将其写入单独的文件。所以你问/?在cmd中键入help时列表中的所有命令。 以下是我的代码的主要部分:

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
      )
    )
  )
)

我在我的Regular exp中使用了来自[Q..M]的所有序列,因为只有一组[A-Z]存在一些问题 但问题是在我的FOR和IF文件中 - REM命令有帮助。有谁知道为什么会如此? 为了解决这个问题,我使用:

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

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

2 个答案:

答案 0 :(得分:2)

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

有关[A-Z]无法与FINDSTR正常工作的原因,请参阅Why does findstr not handle case properly (in some circumstances)?。有关已知FINDSTR怪癖的详尽列表,请参阅What are the undocumented features and limitations of the Windows FINDSTR command?

过滤掉命令名称的更好方法是查找以至少一个非空格字符开头的行,后跟任意数量的其他非空格字符,后跟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

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

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

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

答案 1 :(得分: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
            )
        )
    )
)