Форум: "Прочее";
Текущий архив: 2009.06.28;
Скачать: [xml.tar.bz2];
ВнизПомогите с 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c