@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
命令中的每个文件制作帮助文件。但是......它不能正常工作,我不知道为什么。请帮帮我)
@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
命令中的每个文件制作帮助文件。但是......它不能正常工作,我不知道为什么。请帮帮我)
您的代码无法正常工作,因为 %ERRORLEVEL% 在解析时被扩展,并且整个带括号的 FOR 代码块被一次性解析。您需要每次迭代的 ERRORLEVEL 值,但您的代码正在获取循环执行之前存在的 ERRORLEVEL 值。
一种解决方案是使用setlocal enableDelayedExpansion
. 然后在你的循环中使用!ERRORLEVEL!
而不是%ERRORLEVEL%
. 延迟扩展将在每次迭代的执行时给出所需的 ERRORLEVEL 值。
键入help set
或set /?
从命令行获取有关延迟扩展的更多信息。
但是有一个更简单的解决方案可以完全避免变量扩展。command1 && command2
只有当 command1 成功时才会执行 command2。||
如果先前的命令不成功,还可以使用运算符来执行命令。
但是整个练习有点毫无意义,因为您的 FINDSTR 表达式不会给出正确的结果,所以您的最终输出仍然是错误的。
Ansgar Wiechers 在他的回答中发现了一种搜索模式。不需要“tokens=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
要从您的输出中提取命令,help
您需要这样的东西:
for /f "tokens=1" %%i in ('help ^| findstr /rc:"^[A-Z][A-Z]* "') do (
echo %%i
)
该模式"^[A-Z][A-Z]* "
确保您将只处理以字符开头并且在第一个单词之后至少有两个空格的行。