好的,所以我试图使基于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 ()
在命令运行时 发生?
答案 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
,这样它实际上不会冻结提示本身。