2012-10-04 63 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