Windows 生成帮助文件

Windows 生成帮助文件,windows,command-line,cmd,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

我想为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
      )
    )
  )
)
我在常规exp中使用[Q..M]的所有序列,因为[A-Z]的集合存在一些问题 但问题是,在我的FOR和IF文件中,有REM命令的帮助。有人知道为什么会这样吗? 要修复它,我使用:

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

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

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

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

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

有关[A-Z]无法与FINDSTR正常工作的原因的解释,请参阅。有关已知FINDSTR怪癖的详细列表,请参阅

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

如果要忽略某些命令,只需使用附加的FINDSTR和/V选项即可

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

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.TXT文件被创建了3次

我假设所有语言的第一行和最后一行都使用混合大小写。不难优化FINDSTR筛选器以排除第二个字符为空格或小写字符的任何行:

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

对于
for
IF
我仍然有文件,其中包含命令
REM
的帮助。你能解释一下你的正则表达式[^^^^^^^ o]吗?你把集合反转了4次?cmd提示符和正则表达式都会处理转义,所以要得到一个插入符号,就要转义一个插入符号,然后再转义两个插入符号。我发现只使用[A-Z]我就多了两行“For”,所以我添加了“不匹配o作为第二个字符”。我试着用[A-Z][A-Z]两个大写字母,但它仍然匹配“for”。可能范围不区分大小写,或者只是一个bug。仅供参考,我运行了你的和我的,在FOR.txt或IF.txt文件中都没有REM。请尝试“@echo help%%i>%%i.txt”,以便查看您正在生成的命令。这取决于语言环境。它适用于英语,但不适用于其他语言。很好的例子,但什么意思是
^[^][^]
。这意味着在行首排除两个连续的空格?否,
[^]
表示除空格以外的任何字符。我的help命令以两行开头,第一个单词中没有空格。我不明白你怎么能把它排除在外。@paul-我不明白,但这没关系。请参阅对我的答案的编辑。在比较了您的命令和以下命令后:
help | findstr/rvc:“^.[a-z]
我完全迷路了:D