Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.06.28;
Скачать: CL | DM;

Вниз

Помогите с batаникой   Найти похожие ветки 

 
31512 ©   (2009-04-22 12:49) [0]

Есть некоторая программа ru.exe. Она консольная и сразу после запуска ожидает ввода. Например

D:\Projects>ru.exe
1 2 1.3 0

После чего выводит результат вычислений в консоль.
Если хочется сохранить результат в файл, то пишу:

D:\Projects>ru.exe > results.txt
1 2 1.3 0

Всё работет хорошо. Далее возникает необходимость запустить программу 300 раз с разными значениями ввода. Проштудировав справку и интернет научился считывать из файла значения ввода:

D:\Projects>ru.exe < params.txt > results.txt

где, в params.txt имеется 300 нужных значений:
1 2 1.3 0
1.01 2 1.3 0
1.02 2 1.3 0
1.03 2 1.3 0
и так далее.
Но считывается только первая строчка. Тогда я переписываю скрипт с циклом для обработки params.txt

@echo off
for /f "delims=" %%i in (params.txt) do (

ru.exe < %%i > result.txt

)

При этом ничего не работает, результат такой:

D:\Projects>for /F "delims=" %i in (params.txt) do (ru.exe  0<%i 1>result.txt )
D:\Projects>(ru.exe  0<1 2 1.3 0 1>result.txt )
Не удается найти указанный файл.

Откуда-то взялись первый 0 и последняя 1. Понятно, что файла с именем (ru.exe  0<1 2 1.3 0 1>result.txt ) не может быть.
Однако следуюший код работает как и ожидается:

@echo off
for /f "delims=" %%i in (params.txt) do (
echo %%i
)

т.е. выводит в столбик значения, записанные в params.txt:
1 2 1.3 0
1.01 2 1.3 0
1.02 2 1.3 0
1.03 2 1.3 0
и так далее.

Вопросы:
1. Как осуществить подстановку значения %%i правильно?
2. Откуда взялись первый 0 и последняя 1?
3. Почему вдруг тело цикла стало именем файла?


 
31512 ©   (2009-04-22 13:20) [1]

Если переписать скрипта так:

@echo off
for /f "delims=" %%i in ("params.txt") do (

echo %%i

)

то вызывает блокнот с содержимым params.txt...


 
antonn ©   (2009-04-22 13:58) [2]

@Echo Off
For /F "delims=" %%a In (params.txt) Do Call :GetLineParam %%a
GoTo :EOF

:GetLineParam

Echo %1 %2 %3 %4

GoTo :EOF

выполнение программ (комманд, отличных от echo) в цикле несколько не реализовано, по моему, сам мучался :)


 
Styx_   (2009-04-22 13:59) [3]

Наверное, так:
echo %%i | ru.exe 1>result.txt


 
31512 ©   (2009-04-22 15:25) [4]


> antonn ©   (22.04.09 13:58) [2]

Спасибо, но результат ровно такой же как

@echo off
for /f "delims=" %%i in (params.txt) do (
echo %%i
)


Мне нужно задать ввод программе ru.exe. Вот в

D:\Projects>ru.exe < params.txt > results.txt

у консоли это получается, но только для первой строки из params.txt, а мне нужно для каждой. Потому и циклом пытаюсь. Твоим способом можно преобразовать к вводу параметрами коммандной строки.


 
31512 ©   (2009-04-22 15:30) [5]


> Styx_   (22.04.09 13:59) [3]

Можешь дать некоторые пояснения?
Зачем там 1?


 
Styx_   (2009-04-22 15:55) [6]


> Зачем там 1?

Да в принципе низачем - без неё будет то же самое, так как первый stream (stdout) подразумевается по умолчанию для вывода, как и stdin для ввода :) Но можно написать 2>errors.txt, и тогда в errors.txt будет перенаправлен stderr


 
31512 ©   (2009-04-22 16:04) [7]


> Styx_   (22.04.09 15:55) [6]

Понятно. Впринципе она их сама добавляет.
Непонятно почему оно работает... Похоже нужно с приоритетами разбираться...


 
Styx_   (2009-04-22 16:13) [8]

А что непонятно-то и причём приоритеты? echo выводит свой аргумент в STDOUT, мы его через PIPE (|) отправляем Вашей программе в STDIN. А Вы исходно пытались то, что нужно передать в STDIN, подсунуть ей прямо в командной строке.


 
antonn ©   (2009-04-22 16:16) [9]

не понял, вот так не работает?
@Echo Off
For /F "delims=" %%a In (params.txt) Do Call :GetLineParam %%a
GoTo :EOF

:GetLineParam

"D:\Projects>ru.exe %1 %2 %3 %4" >>1.txt

GoTo :EOF


 
Styx_   (2009-04-22 16:19) [10]

2antonn
У него программа ожидает ввод из STDIN, а не параметры в коммандной строке.


 
31512 ©   (2009-04-22 16:28) [11]


> Styx_   (22.04.09 16:19) [10]

Ага. Спасибо. Разобрался. Теперь впереди работа с results.txt



Страницы: 1 вся ветка

Текущий архив: 2009.06.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
15-1240847736
Практик
2009-04-27 19:55
2009.06.28
Наука: Прикладной смысл


2-1241637084
Pauk
2009-05-06 23:11
2009.06.28
Как пользоваться LoadString?


2-1242046804
СДракон
2009-05-11 17:00
2009.06.28
Excel


15-1240614017
Городской Шаман
2009-04-25 03:00
2009.06.28
В Украине официально узаконили взятки.


2-1242109990
novai
2009-05-12 10:33
2009.06.28
ошибка загрузки изображения из TMemoryStream