2013-10-14 98 views
1

我想为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 
    ) 
    ) 
) 
) 

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

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

但我不明白为什么它是如此。

回答

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

我仍然有对'FOR'和'与帮助IF'帮助文件某种程度上命令'REM'。你能解释你的正则表达式吗?[^^^^ o] - 你倒置了4次? –

+0

cmd提示符和正则表达式都处理转义符,因此为了得到*一个*符号,单个脱字符符被转义,然后这两个脱字符又被转义。我发现只有[A-Z]我有两个额外的“For”行,所以我补充说“不匹配o作为第二个字符”。我尝试了两个首都的[A-Z] [A-Z],但它仍然匹配“For”。也许范围不区分大小写,或者只是一个错误。仅供参考,我运行了你的和我的,并且在FOR.txt或IF.txt文件中都没有REM。尝试“@echo help %% i> %% i.txt”,查看您正在生成的命令。 –

+1

这是区域设置相关的。它适用于英语,但不适用于其他语言。 – dbenham

2

你在你的问题发布的代码给我正确的结果(之前我甚至重新格式化了一下)。

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

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

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

我认为所有的语言对第一行和最后一行都使用混合大小写。不难细化FINDSTR过滤,除去线,其中第2个字符是空格或小写字符:

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

很好的例子,但是什么意思'^ [^] [^]'。这意味着排除一行开始处的两个连续空格吗? – Paul

+0

不,'[^]'是指除空格以外的任何字符。 – dbenham

+0

我的帮助命令从第一个单词中没有空格的两行开始。我不明白你如何排除它。 – Paul