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, правда, можно передать сценарий ответов через ключ /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
 
А не проще ли всё засунуть в sql-файлик, и по крону вызывать sqlplus с передачей единственного параметра?
25.06.2014 16:36
OlegON
 
Если речь о тиражируемом решении - ни разу не проще. Давайте не будем обсуждать тему, что лучше один файлик или два? Вопрос в том, может говвинда это делать или нет?
Часовой пояс GMT +3, время: 16:53.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.