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

Вниз

Поток ввода в .bat-файле Windows   Найти похожие ветки 

 
lead-in   (2012-12-23 17:16) [0]

Делаю bat`ник который запускается сторонней программой, она же передаёт bat`нику на его поток ввода некоторые данные. Каким образом эти данные в bat`нике можно "принять" (например, сохранить в переменную или просто вывести на экран)?

Поясню на примере:
a.bat (имитирует стороннюю программу):
echo "test" | b.bat

b.bat (имитирует мой будущий bat`ник):
rem Далее пытаюсь вывести полученные данные на экран...
echo %0%
echo %1%
echo %STDIN%

Никакой из вариантов не помогает(


 
TUser ©   (2012-12-23 17:42) [1]

echo %1
echo %*


 
lead-in   (2012-12-23 17:46) [2]

TUser
Ничего не дает, пишет "Режим вывода команд на экран <ECHO> включён."


 
NoUser   (2012-12-23 18:04) [3]

> Никакой из вариантов не помогает( -> мало вариантов)

a.bat:
call b.bat param_1

b.bat:
@echo off
echo %0
echo %1
echo %PATH%


 
Юрий Зотов ©   (2012-12-23 18:13) [4]

Вызов:
b.bat test


 
lead-in   (2012-12-23 18:14) [5]

NoUser

Вот результат:
...>call b.bat var1
b.bat
var1
c:\program ... <тут вывод пер. PATH>


 
lead-in   (2012-12-23 18:18) [6]


> Юрий Зотов


test тогда как параметр передадится, но не поток ввода(


 
Юрий Зотов ©   (2012-12-23 18:38) [7]

> передаёт bat`нику на его поток ввода
То есть, в консоль. По дефолту она и есть поток ввода для батников.

> Каким образом эти данные в bat`нике можно "принять"
Через параметры.

a.bat
@echo off
b.bat param1 param2

b.bat
echo %1 %2


 
NoUser   (2012-12-23 18:38) [8]

> она же передаёт bat`нику на его поток ввода некоторые данные.
если Вам нужен поток можно использовать временный log.txt а в b.bat for
Но интерактива (STDIN/OUT) скорее всего не получится, ибо это bat.

http://www.rsdn.ru/article/winshell/batanyca.xml


 
lead-in   (2012-12-23 18:50) [9]


> Юрий Зотов


И всё-таки предполагаю что можно передать не только через параметры, вот цитата из описания той самой проги которая вызывает bat`ник (чтобы снять вопросы, это Subversion под Windows):

# The pre-revprop-change hook is invoked before a revision property
# is added, modified or deleted.  Subversion runs this hook by invoking
# a program (script, executable, binary, etc.) named "pre-revprop-change"
# (for which this file is a template), with the following ordered
# arguments:
#
#   [1] REPOS-PATH   (the path to this repository)
#   [2] REV          (the revision being tweaked)
#   [3] USER         (the username of the person tweaking the property)
#   [4] PROPNAME     (the property being set on the revision)
#   [5] ACTION       (the property is being "A"dded, "M"odified, or "D"eleted)
#
#   [STDIN] PROPVAL  ** the new property value is passed via STDIN.
#
# <...>
# <...>
# <...>
#
# On a Windows system, you should name the hook program
# "pre-revprop-change.bat" or "pre-revprop-change.exe",
# but the basic idea is the same.



> NoUser


Да всё что гугл выдал на эту тему я по диагонали посмотрел, в том числе и эту ссылку.
Но в описании к вызывающей программы (выше) по-моему явно намекается что можно данные передавать и через поток ввода.

Да 100% что можно. иначе как тогда работает такой вызов:
dir | grep test
Ведь тоже самое здесь и происходит, grep же со своего потока ввода данные берёт.


 
Юрий Зотов ©   (2012-12-23 19:29) [10]


> Ведь тоже самое здесь и происходит,

Не совсем. Grep - это программа, а не батник.


 
Юрий Зотов ©   (2012-12-23 19:31) [11]

Программа исполняется сама, а батник исполняет cmd.


 
Anatoly Podgoretsky ©   (2012-12-23 19:49) [12]

И DIR тоже подпрограмма программы CMD


 
TUser ©   (2012-12-23 19:54) [13]

тогда так

@echo off
set /p aaa=""
echo %aaa%

G:\temp>echo 123 | aaa.bat
123


 
Юрий Зотов ©   (2012-12-23 20:05) [14]


> Anatoly Podgoretsky ©   (23.12.12 19:49) [12]

В данном случае это неважно, потому что речь идет о переопределении потока ввода.


 
NoUser   (2012-12-23 20:37) [15]

#   [STDIN] PROPVAL  ** the new property value is passed via STDIN.

> Но в описании к вызывающей программы (выше) по-моему явно намекается что можно данные передавать и через поток ввода.

Конечно можно, но bat не сможет с ними работать, а так как "** the new property value" сейчас ещё нет, то подойдёт и bat.


 
lead-in   (2012-12-23 20:53) [16]


> TUser


Непонятно как, но в случае с тестовыми bat-файлами работает)
А когда переношу на свою задачу нет (в качестве потока ввода всё время приходит строка "Режим вывода команд на экран (ECHO) включен."), а bat`ник у меня такой:

@echo off
set /p parval = ""
rem echo %parval%  >> D:\Repositories\MainDataStorage\hooks\log.txt
echo %parval% | python "D:\Repositories\MainDataStorage\hooks\pre-revprop-change-python-script.py" %1 %2 %3 %4 %5
exit /b %errorlevel%

Не заню имеет значение или нет, но видно что задача bat`ника по-сути просто запустить питоновский скрипт и передать ему всё (параметры командной строки и поток ввода) что bat`ник получил сам.


 
Styx   (2012-12-23 21:52) [17]

Если Ваш батник не должен этот входной поток как-то обрабатывать, то и забейте на него. Питон его сам получит.
А если Вы хотите сохранить его в файл - то сохраните, а потом передайте питону из файла. Типа

@echo off
setlocal
set tempfile=%date:~4%%time::=%
set tempfile=%tempfile:/=%
set tempfile=%temp%\pre-revprop-change-python-script-%tempfile:.=%.tmp
more > %tempfile%
type %tempfile% >> D:\Repositories\MainDataStorage\hooks\log.txt
type %tempfile% | python "D:\Repositories\MainDataStorage\hooks\pre-revprop-change-python-script.py" %*
set err=%errorlevel%
del /q %tempfile%
exit /b %err%


 
NoUser   (2012-12-23 22:01) [18]


> NoUser   (23.12.12 20:37) [15]
фигню сморозил.


> lead-in   (23.12.12 20:53) [16]
> Не заню имеет значение или нет

но задача bat`ника запустить python с нужными параметрами командной строки и передать ему данные через stdin.

pre-revprop-change-python-script.py
...
msg = sys.stdin.read()
...



> в качестве потока ввода всё время приходит строка "Режим
> вывода команд на экран (ECHO) включен."

ответ есть в [10].


 
lead-in   (2012-12-23 22:14) [19]


> Styx   (23.12.12 21:52) [17]
> Если Ваш батник не должен этот входной поток как-то обрабатывать,
>  то и забейте на него. Питон его сам получит.


Да, так работает)


> NoUser   (23.12.12 22:01) [18]
>
> pre-revprop-change-python-script.py
>  ...
> msg = sys.stdin.read()
> ...
>


Ага, я так и делаю.


 
NoUser   (2012-12-23 22:26) [20]


> Styx   (23.12.12 21:52) [17]
> more > %tempfile%

Спасибо, я думал, что такой возможности нет.


 
lead-in   (2012-12-23 22:32) [21]

Спасибо всем (а Styx особенно) за помощь, вопрос решён)))



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

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

Наверх




Память: 0.52 MB
Время: 0.007 c
15-1356268593
lead-in
2012-12-23 17:16
2013.04.21
Поток ввода в .bat-файле Windows


2-1349629558
dars73
2012-10-07 21:05
2013.04.21
Проблема с кодировкой


15-1300992172
Votmax
2011-03-24 21:42
2013.04.21
Расчет формул


15-1356467402
Юрий
2012-12-26 00:30
2013.04.21
С днем рождения ! 26 декабря 2012 среда


2-1350119385
Вова
2012-10-13 13:09
2013.04.21
Как скопировать строку в буфер обмена и вставить ее в программу