@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,程序生成幫助文件
@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,程序生成幫助文件
要的help
輸出只提取命令你需要的東西是這樣的:
for /f "tokens=1" %%i in ('help ^| findstr /rc:"^[A-Z][A-Z]* "') do (
echo %%i
)
模式"^[A-Z][A-Z]* "
確保你只與一個字符開始,必須在生產線在第一個單詞後至少有兩個空格。
您的代碼不工作,因爲%ERRORLEVEL%在解析時展開,並且整個帶括號的FOR代碼塊在一次傳遞中被解析。您希望每次迭代都使用ERRORLEVEL的值,但是您的代碼正在獲取執行循環之前存在的ERRORLEVEL的值。
一個解決方案是使用setlocal enableDelayedExpansion
在頂部啓用延遲擴展。然後在你的循環中使用!ERRORLEVEL!
而不是%ERRORLEVEL%
。延遲擴展將在每次迭代的執行時間給出期望的ERRORLEVEL值。
從命令行輸入help set
或set /?
以獲取有關延遲擴展的更多信息。
但是有一個更簡單的解決方案可以避免可變的擴展。僅當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
作爲一般規則「不工作」是毫無意義。如果它工作,你就不會在這裏。我們需要知道它不起作用。你創建了壞文件?根本沒有文件?語法錯誤?這臺藍屏死機的電腦? –
有不需要的文件。但是,如果我輸入「echo %% i | findstr/R」^ [A-Z] * $「> nul」,則「nul」程序將在屏幕上輸出正確的命令。 – user1720753