@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