保持`/ f`重定向输出/使`do()`在命令执行期间发生

时间:2018-07-25 16:21:59

标签: windows batch-file cmd

好的,所以我试图使基于ARM的CPU压力测试程序自动化(它通过命令提示符运行,并且需要大量用户输入)。我想做的是使用for /f查看输出,并在看到各自的提示字符串时运行一些不同的sendkeys脚本。我尝试制作两个非常准系统的批处理文件来进行测试:

  • 第一个是简单的批处理文件,要求3个单独的输入

    @echo off
    REM This is a file that asks for inputs
    set /p q1="Please press 1: "
    echo.
    set /p q2="Please press 2: "
    echo.
    set /p q3="Please press 3: "
    echo.
    echo All buttons have been pressed,
    echo.
    echo button 1 was: %q1%
    echo button 2 was: %q2%
    echo button 3 was: %q3%
    echo.
    set /p foo="Press Enter to finish..."
    
  • 第二个是批处理文件,该文件运行第一个(^),并在输出中查找“请按1:”

    @echo off
    echo We will now launch the input command
    echo.
    timeout .5
    echo in 5...
    timeout 1
    echo 4...
    timeout 1
    echo 3...
    timeout 1
    echo 2...
    timeout 1
    echo 1...
    timeout 1
    echo Launching...
    for /f "delims= " %%i in ('Input.bat ^| find /i "Please press 1:"') do (
        echo we did it
    )
    echo Did you make the right decisions?
    set /p foo=
    

    我得到的结果是在“启动...”回显之后出现空白命令提示符。如果我按Enter四次,则会返回“我们做到了”和“您是否做出了正确的决定?”。回声。所以,最后是我的问题的实质。有没有办法阻止for /f重定向标准输出,还有没有办法使for /f () do ()在命令运行时 发生?

1 个答案:

答案 0 :(得分:0)

因此,根据您的请求,听起来好像您正在尝试从新的batch1脚本中读取batch2脚本中的字符串。为此,您必须将变量导出到文本文档。从那里,我们可以阅读文本文档并收集变量。如果我对您的要求完全不对(很难理解您的要求),那么我的寡头,希望这些技巧至少可以帮助您。

要导出文件,您需要使用>> 例如:Echo This will be line one! >> Yourfile.txt

请注意,完成脚本后,请使用goto :eof退出。

这是您的第一个批处理文件:

@ECHO OFF
@DEL /Q %~dp0\strings.txt

REM This batch file asks for inputs
set /p q1="Please press 1: "
echo %q1% >> strings.txt
echo.
set /p q2="Please press 2: "
echo %q2% >> strings.txt
echo.
set /p q3="Please press 3: "
echo %q3% >> strings.txt
echo.
echo All buttons have been pressed,
echo.
echo button 1 was: %q1%
echo button 2 was: %q2%
echo button 3 was: %q3%
echo.

set /p foo="Press Enter to finish..."
goto :eof

这是您的第二个批处理文件:

@ECHO OFF

echo We will now launch the input command.
echo.
echo in 5...
PING localhost -n 2 >nul
echo 4...
PING localhost -n 2 >nul
echo 3...
PING localhost -n 2 >nul
echo 2...
PING localhost -n 2 >nul
echo 1...
PING localhost -n 2 >nul
CLS
echo Launching...

:: Do action for each string. Use %%G to call the variable.
for /f "delims== tokens=*" %%G in (strings.txt) do (

echo Working on string: %%G

)

echo Did you make the right decisions?
pause > nul
DEL /Q %~dp0\strings.txt
goto :eof

请记住,您实际上可以使用timeout 1来代替PING localhost -n 2 >nul,这样它实际上不会冻结提示本身。