2012-10-04 65 views
-2
@echo off 
md helpgen 2>nul 
cd helpgen 
for /F %%i in ('help') do (
    echo %%i|findstr /R "^[A-Z]*$" >nul 
    if "%ERRORLEVEL%"=="0" (
    help %%i>%%i.txt 
) 
) 
cd .. 

該程序應該爲help命令中的每個文件生成幫助文件。 但是...它不能正常工作,我不知道爲什麼。請幫我)cmd,程序生成幫助文件

+4

作爲一般規則「不工作」是毫無意義。如果它工作,你就不會在這裏。我們需要知道它不起作用。你創建了壞文件?根本沒有文件?語法錯誤?這臺藍屏死機的電腦? –

+0

有不需要的文件。但是,如果我輸入「echo %% i | findstr/R」^ [A-Z] * $「> nul」,則「nul」程序將在屏幕上輸出正確的命令。 – user1720753

回答

2

要的help輸出只提取命令你需要的東西是這樣的:

for /f "tokens=1" %%i in ('help ^| findstr /rc:"^[A-Z][A-Z]* "') do (
    echo %%i 
) 

模式"^[A-Z][A-Z]* "確保你只與一個字符開始,必須在生產線在第一個單詞後至少有兩個空格。

3

您的代碼不工作,因爲%ERRORLEVEL%在解析時展開,並且整個帶括號的FOR代碼塊在一次傳遞中被解析。您希望每次迭代都使用ERRORLEVEL的值,但是您的代碼正在獲取執行循環之前存在的ERRORLEVEL的值。

一個解決方案是使用setlocal enableDelayedExpansion在頂部啓用延遲擴展。然後在你的循環中使用!ERRORLEVEL!而不是%ERRORLEVEL%。延遲擴展將在每次迭代的執行時間給出期望的ERRORLEVEL值。

從命令行輸入help setset /?以獲取有關延遲擴展的更多信息。

但是有一個更簡單的解決方案可以避免可變的擴展。僅當command1成功時,command1 && command2纔會執行command2。如果先前的命令不成功,則還有||運算符用於執行命令。

但是整個練習是沒有意義的,因爲你的FINDSTR表達式不會給出正確的結果,所以你的最終輸出仍然是錯誤的。

Ansgar Wiechers確定了一種在his answer中工作的搜索模式。 「令牌= 1」不需要,因爲這是默認設置。

最終的腳本可以簡單:

@echo off 
md helpgen 2>nul 
cd helpgen 
for /f %%i in ('help ^| findstr /rc:"^[A-Z][A-Z]* "') do help %%i>%%i.txt