2013-10-14 113 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