[ОТВЕТИТЬ]
Опции темы
24.06.2014 22:16  
OlegON
Помогите, пожалуйста, а то мне уже и гугл по Линуксу все предлагает :)
В общем, в Linux есть финт типа
Код:
program <<EOF
команда программы 1
команда программы 2
команда программы 3
EOF
Обозначающий, что будет запущена program, после чего в нее будут переданы последовательно три команды с Enter
Как такое сделать в Windows? Цель - не создавать отдельный скрипт, а передать несколько команд прямо в одном скрипте. Всяческие варианты с echo плохи необходимостью экранировать кавычки и т.п., что-то вроде << есть? Мне кажется, что я когда-то этим пользовался и под виндой.
Плохой вариант с echo приведу сразу
Код:
@echo off
( echo cmd1
echo cmd2
echo cmd3 ) | program
 
25.06.2014 10:56  
KirillHome
На сколько я в курсе - лучшего ничего нет.
Есть вариация такого же решения - сначала выводим информацию во временный файл, а потом переназначаем на него ввод

Код:
@Echo off
echo Param1 > %temp%\TempFile.txt
echo Param2 >> %temp%\TempFile.txt
echo Param3 >> %temp%\TempFile.txt
programm < %temp%\TempFile.txt
Но всё равно - срабатывает не всегда. К примеру, в DiskPart таким образом ответы не передаются (именно в DiskPart, правда, можно передать сценарий ответов через ключ /s).
 
25.06.2014 11:01  
OlegON
Как я уже говорил, все варианты с echo упираются в экранирование :( Да и вообще через одно место... С временным файлом еще хуже в свете возможного отсутствия права на запись.
 
25.06.2014 12:22  
KirillHome
Ещё один вариант (с vbscript)

Вот такой bat-файл (test.bat)
Код:
@echo off
set /p DirN=Dirname1
md %DirN%
set /p DirNew=Dirname2
md %DirNew%
И к нему - такой vbs-файл (test.vbs)
Код:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run ("test.bat")

WScript.Sleep(300)
WshShell.SendKeys "123"
WshShell.SendKeys ("{ENTER}")
WScript.Sleep(300)
WshShell.SendKeys "456"
WshShell.SendKeys ("{ENTER}")
Кладём в один каталог, запускаем test.vbs - создаются два подкаталога (123 и 456).

Ряд символов + ^ % ~ ( ) { } [ ] тоже надо экранировать
 
25.06.2014 13:57  
OlegON
Прикалываешься, да? :) Суть-то как раз в том, чтобы одним файлом скрипт был. А тут еще и vbs очень ненадежная штука, в плане, что у многих отрублен.
 
25.06.2014 14:08  
KirillHome
Если честно - не очень понял изначальную задачу. И поэтому всякую фигню горожу...

К примеру: А что если просто передать в качестве параметров в скрипт нужную информацию?
 
25.06.2014 15:47  
twix
Цитата:
Сообщение от KirillHome
Если честно - не очень понял изначальную задачу. И поэтому всякую фигню горожу...

К примеру: А что если просто передать в качестве параметров в скрипт нужную информацию?
Это не *nix way же. Надо чтобы всякие там грепы и перенаправления вывода использовались, иначе скучно.
 
25.06.2014 16:08  
OlegON
Нене, речь идет о том, чтобы передать в программу несколько строк. При этом не использовать внешний файл.
Например, Контроль длины очереди почтовика
Как видно, я поставил <<EOF и дальше спокойно пишу скрипт, не заморачиваясь различными эскейп-последовательностями и т.п. Получается нечто вроде ресурсов в бинарнике.
 
25.06.2014 16:19  
twix
Цитата:
Сообщение от OlegON
А не проще ли всё засунуть в sql-файлик, и по крону вызывать sqlplus с передачей единственного параметра?
 
25.06.2014 16:36  
OlegON
Если речь о тиражируемом решении - ни разу не проще. Давайте не будем обсуждать тему, что лучше один файлик или два? Вопрос в том, может говвинда это делать или нет?
 
 


Опции темы



Часовой пояс GMT +3, время: 03:28.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.