Windows批处理文件+控制台exe

3
我一直在试图创建一个批处理文件,将文本传递给控制台应用程序。 在这种情况下,它是一个exe文件,可以将大型.dat文件修剪到指定的开始/停止时间和日期。 它期望文件名,开始时间,停止时间以及一个y(yes)响应来开始剪切。 下面的脚本可以工作,但是在提交最后的“y”响应后,.exe会在尝试启动剪切之前终止。
有人能看出可能有什么问题吗? 尝试了ping延迟、暂停、/wait等,都达到了相同的效果。
@echo Off

Set program=c:\rtdm_cutter.exe

(
echo 20121126_191613_09224_RTDM.BIN 
echo 2012/11/25 15:00:00
echo 2012/11/25 15:15:00
echo y
) |start /realtime /B /wait %program%

为了更好地了解环境,需要知道每个 .bin、.exe 和 .bat 文件相对于彼此的位置。这是为了解决 .exe 是否能找到 .bin 文件的问题。接下来,需要检查 .exe 在发送 'y' 后是否输出任何消息。 - David Ruhmann
是的,bin文件已被找到,否则它不会接受开始时间。 - user1882567
通过在“echo 2012/11/25 15:15:00”末尾添加“&& more”,我已经取得了一些进展。这使我有机会手动输入y(是),并且切割正确开始。如果我能让它自动接受Y并继续,那就太完美了。 - user1882567
由于“more”选项有效,因此似乎确实是时间问题。我不能看到ping延迟工作的原因是它将在调用开始命令之前评估和流逝。脚本将在将输出重定向到开始命令之前处理括号内的所有命令。但“more”有效,因为它在输出中充当中断。 - David Ruhmann
你尝试过使用文件作为输入吗?你可以先将“命令”导入到文件中。另外,你可以尝试一些疯狂的方法,比如在确认之前添加一个额外的换行符(echo.)。 你有这个.EXE源代码的访问权限吗?了解它获取确认的方法会很有用。 - mojo
显示剩余4条评论
1个回答

0

我会以不同的方式编写脚本,类似于这样:

@echo off  
:: script.bat  
SET programx=c:\rtdm_cutter.exe
IF "%1"=="" ( SET one=20121126_191613_09224_RTDM.BIN ) ELSE ( SET one=%1 )
IF "%1"=="" ( SET two=2012/11/25 15:00:00 ) ELSE ( SET one=%2 )
IF "%1"=="" ( SET thr=2012/11/25 15:15:00 ) ELSE ( SET one=%3 )
IF "%1"=="" ( SET answer=Y ) ELSE ( SET answer=%4 )
IF "%4"=="" ECHO %answer% | start /realtime /B /wait %programx% %one% %two% %thr%
IF "%4"=="" GOTO :END    
ECHO %answer% | cmd.exe /C %programx% %1 %2 %3    
:END
pause

然后,像这样调用它(作为示例):
CALL .\script.bat blah.BIN "2012/11/25 15:00:00" "" "Y"

无法保证这段代码能够正常工作。我只是猜测而已。但希望您能理解我的意思。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接