Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd)

Автор: bybars
Дата сообщения: 14.02.2010 01:17

Цитата:
set /p file = "Путь к файлу: "

надо
set /p file="Путь к файлу: "
без пробелов

Кстати, а зачем ту строка ?

Цитата:
set %file%

Она же будет выполнена как
set введенное_имя_файла
Может быть имелось ввиду
echo %file%
?
Автор: bomzzz
Дата сообщения: 14.02.2010 01:59
что написано то и имелось ввиду.
Автор: bybars
Дата сообщения: 14.02.2010 02:46
NightV

Цитата:
Привет уважаемые, тут понадобился батник управления теликом с медиапортала а я в этом не силен, не бейте

его нуна включать и выключать, даю команду на включение

mode com1 baud=9600 parity=n data=8 stop=1 rts=off dtr=off
echo ka 00 01>>com1
включается и получаю ответ (если в терминале) типа "ага... я включился"

A 01 OK01x

Я не совсем понял, Вы даете команду из батника, а ответ получаете в окне терминальной программы?
И еще. Вы можете перенаправить ответ в файл (из батника)?
Если можете, то команда for Вам в помощь (см. help for)

Поясняющий пример:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

эта команда обрабатывает файл myfile.txt, пропускает все строки, которые
начинаются с символа точки с запятой, и передает вторую и третью подстроки
из каждой строки в тело цикла, причем подстроки разделяются запятыми и/или
пробелами. В теле цикла переменная %i используется для второй подстроки,
%j - для третьей, а %k получает все оставшиеся подстроки после третьей.


Код: FOR /F "eol=; tokens=3* delims=, " %%i in (myfile.txt) do (
@echo %%i (Эта строка не нужна, просто для контроля, что мы взяли нужный токен)
if "%%i" == "OK01x" (
echo Включено, надо выключить (или я что-то перепутал
) else (
echo Выключено, надо включить
)
)
Автор: oreguru
Дата сообщения: 14.02.2010 03:07
bybars
Спасибо за помощь.

set %file% - это я переменную проверял, в оригинале "set file" было, недоглядел...

Автор: NightV
Дата сообщения: 14.02.2010 04:39
bybars благодарю за ответ
как раз и стоит загвозка КАК загнать ответ в переменую, тилик отвечает в течении доли секунд тоесть перехватывать нуна сразу после "команды-вопроса"


может что-то типа
echo ka 00 ff>>com1
сом1>> echo "и тут пхаем в переменную"

P.S. ответ я вижу только если "общаюсь" с ним в терминале, это и понятно.

---------------------------------------------------------------------------------
сом1>> echo
не работает (проверил), он считает что это файл
тоесть нужна команда чтоб "слушала" СОМ на 0.5-1 секунд и присваивала "услышаное" переменной

что-то мне начинает казатся что с батника это проделать невозможно
Автор: bybars
Дата сообщения: 14.02.2010 10:09
NightV
А почему стоит задача, что именно батником это нужно сделать?
А если exe?
Я, в свое время, писал терминальную программу. Может ее приспособить?
Только нужно найти исходники
Автор: bybars
Дата сообщения: 14.02.2010 17:28
2NightV
Написал программку (не универсальную), которая посылает на указанный порт команду и записывает ответ в файл.
Еще нужна такая?
Загрузил на iFolder.ru SerialEcho 1.0
http://ifolder.ru/16411916
Кстати, в программе есть Ваш ник.
Первый раз воспользовался файлообменником для раздачи, и,извините, не удержался от соблазна поствить на просмотр рекламы. Пусть это будет Ваша плата за мои труды
Автор: NightV
Дата сообщения: 14.02.2010 23:03
bybars
ну Вы прям кудесник
попробую и отпишусь с описанием (инструкцией) как я свою траблу решил, для таких же мозгокрутов как я.
кстате а на чем писали (язык)?
-----------------------------------------------------------------------------------------
короче проверил
1
получается что твоему ехе нельзя давать параметры с пробелом, тоесть:
serialecho.exe com1 tv.txt ka 00 ff
(выдает хелп какбутто вообще без параметров запустил)

только в ковычках, типа:
serialecho.exe com1 tv.txt "ka 00 ff"

или слитно (НО мне низя так, только с пробелами)
в ковычках телик команду хавает (включается-выключается)

с этим розабралить, нуна команду в ковычках

2
файл с ответом создается НО пустой, всегда (когда проглатил и выполнил параметры с командой)


если с комуникацией проблемы нет может еще сделать чтоб еще в качестве параметра давать и время задержки в течениие которой она слушает порт в милисекундах, так-как как мне кажется телик отвечает примерно в течении трети или четверти секунды. в милисекундах, например:
serialecho.exe com1 tv.txt 1000 "ka 00 ff"

кстате в инете я много встречал что управляет апаратурой через СОМ, изгаляются все как могут, а тут будет легкое и изящьное решение (если конечно заработает )
Автор: bybars
Дата сообщения: 15.02.2010 09:00
Сегодня вечером попробую реализовать замечания. Ждите.
Добавлено 2010-02-15
Программа написана на Си, компилировалась специально в MS Studio 6.0, чтобы упростить дистрибуцию

SerialEcho 1.0a http://ifolder.ru/16433242

Внесены изменения по замечаниям, указанным выше.
Жду реакции тестировщиков.
Автор: NightV
Дата сообщения: 16.02.2010 00:10
bybars
опять засада.... вокруг одни враги... козни строят

Код:
C:\Users\VL\Desktop>serialecho.exe com1 tv.txt 500 at
WaitCommEvent failed: (87) ╧рЁрьхЄЁ чрфрэ эхтхЁэю.

GetOverlappedResult failed: (995) ╬яхЁрЎш  ттюфр/т√тюфр с√ыр яЁхЁтрэр шч-чр чртх
Ё°хэш  яюЄюър ъюьрэф шыш яю чряЁюёє яЁшыюцхэш .
Автор: bybars
Дата сообщения: 16.02.2010 08:36
Так как наша тема переходит в оффтоп, предлагаю общаться через ПМ (личный ящик)
Если еще кого-либо интересует эта тема -- туда же -- в ПМ.
Автор: AntonVA1
Дата сообщения: 16.02.2010 14:55
Привет всем! помогите написать батник такой:
есть папка с файлами:
lesson1.avi
lesson2.avi
lesson3.avi
lesson4.avi
lesson5.avi

Нужно каждый из них закинуть в rar-sfx с таким комментарием:


Цитата:
Setup=lesson5.avi
TempMode
Silent=1
Overwrite=2


вместо csslesson5.avi, естественно, тот, который в архиве. Это-то у меня и не выходит.

дальнейший вариант, но не обязательный, сделать такую структуру папок:
\lesson1\
\lesson2\
\lesson3\
\lesson4\
\lesson5\

Буду премного благодарен за помощь.

Добавлено:
YESS! Получилось!
Первую чзадания сделал так:

Цитата:
set OUTPUTFILE=comm.txt

for %%f in (*.avi) do (
echo Setup="%%~f"     >%OUTPUTFILE%
echo TempMode     >>%OUTPUTFILE%
echo Silent=1     >>%OUTPUTFILE%
echo Overwrite=2     >>%OUTPUTFILE%

C:\Sys\ARC\WinRAR\winrar.exe a %%~nf "%%~f" -sfx -z%OUTPUTFILE%
)


Благодаря инфе в топе! Спасибо!
А вторая часть... я ее вручную сделаю.
Автор: bybars
Дата сообщения: 16.02.2010 18:47
AntonVA1

Цитата:
А вторая часть... я ее вручную сделаю.

Если я правильно понял, то Вам подойдет ключ -ap архиватора winrar
Автор: Cyberkot
Дата сообщения: 16.02.2010 19:53
Здравствуйте, знатоки!
Подскажите пож-ста батник для скачивания обновленного курейта с родного фтп веба.
Алгоритм , как я это вижу, такой:
1. Коннектимся к фтп (средствами винды , либо wget)
2. Считываем содержание
3. Фильтруем по критерию : расширение , дата и время создания файла.
4. И самый свежий релиз утягиваем себе.
Все это планируется в связке с планировщиком Win 7.
Автор: dimbat
Дата сообщения: 17.02.2010 00:11
Cyberkot
wget.exe ftp://ftp.drweb.com/pub/drweb/cureit/cureit.exe
Всегда тянется последняя версия.
Дальше ключами вгета усовершенствуешь - куда залить, во что переименовать и тд...
Автор: december2010
Дата сообщения: 17.02.2010 23:08
Нужно батником записать сурс текстовика в реестр, не зная одного из значений пути ветки, но известен следующий путь. К примеру HKLM\software\Data\неизвестно\vars Как быть в таком случае?
Запись с параметром String должна быть.
-----------
Часть вопроса с реестром разрешена таким образом:
reg query HKLM\software\Data\ /s
что возвращает нам недостающую ветку сразу в первой строке ответа - HKLM\software\Data\{cebd44c2-bd39-4544-16d3-aab7b87d6c01}

и в ней уже подветка "vars" - HKLM\software\Data\{cebd44c2-bd39-4544-16d3-aab7b87d6c01}\vars

Остается неразрешенной задача работы батника, а именно:
Батник берет первую строку из фаила в который был помещен рекурсивный запрос reg query HKLM\software\Data\ /s > ответ.тхт, подставляет к этой строке \vars и создает запрос для добавления записи с сурсом фаила 123.txt
reg add HKLM\software\Data\{cebd44c2-bd39-4544-16d3-aab7b87d6c01}\vars /v string /t REG_SZ /d "сурс текствого фаила 123.txt" /f
Автор: bybars
Дата сообщения: 18.02.2010 00:25
december2010
Мой ответ ранее

Цитата:
Код:FOR /F "eol=; tokens=3* delims=, " %%i in (myfile.txt) do (
@echo %%i (Эта строка не нужна, просто для контроля, что мы взяли нужный токен)
if "%%i" == "OK01x" (
echo Включено, надо выключить (или я что-то перепутал
) else (
echo Выключено, надо включить
)
)


подходит для

Цитата:
Батник берет первую строку из фаила в который был помещен рекурсивный

Только сразу после выполнения одного шага цикла выходишь из него оператором goto метка. Параметрами "eol=; tokens=3* delims=, " варьируешь, чтобы получить нужную часть этой строки.
См. help for
Автор: december2010
Дата сообщения: 18.02.2010 03:21
Каким образом можно в переменную записать многостроковый сурс текстовика?
Автор: bybars
Дата сообщения: 18.02.2010 14:43
december2010

Цитата:

Каким образом можно в переменную записать многостроковый сурс текстовика?

А я думал

Цитата:
reg add HKLM\software\Data\{cebd44c2-bd39-4544-16d3-aab7b87d6c01}\vars /v string /t REG_SZ /d "сурс текствого фаила 123.txt" /f

Тогда, IMHO, нужно текстовик перевести в формат .reg-файла, а затем
reg import текстовик.reg
Автор: aster X
Дата сообщения: 18.02.2010 16:22
Помогите плиз. Нужно написать скрипт, согласно которому модем дозванивается по номеру, ждет пару сек и кладет трубку. В принципе ничего сложного

rasphone {имя соединения}
raspone /disconnect

Но как прервать выполнение rasphone и перейти сразу на вторую строку?
Автор: december2010
Дата сообщения: 18.02.2010 16:44
как убрать первые и последние 3 пробела в текстовой строке и обрамить строку двойными кавычками?
Автор: bybars
Дата сообщения: 18.02.2010 17:40
aster X
Моя программа SerialEcho
http://ifolder.ru/16481330
должна помочь Вам. Правда модем она берет не из RAS

SerialEcho com1 logfile 10000 atd1234567
SerialEcho com1 logfile 1000 ath

1) Звонит на номер 1234567 и ждет 10 секунд
2) Кладет трубку
Вопросы, если они не касаются темы топика, -- в ПМ

Добавлено
Еще можно
start rasphone ....
каким-нибудь способом сделать задержку
start /wait rasphone disconnect

Задерку можно сделать
- либо какой-нибудь программой
- либо крутить цикл в батнике
Автор: aster X
Дата сообщения: 18.02.2010 17:40
В кавычки можно используя символ ^ перед знаком кавычек. Подробнее посмотри ссылку в шапке "Уроки bat-аники". А про пробелы сходу не отвечу.
Автор: mugil_cephalus
Дата сообщения: 18.02.2010 17:53
december2010
set "var=%var:~3,-3%"
Автор: december2010
Дата сообщения: 18.02.2010 18:09

Цитата:
set "var=%var:~3,-3%"

спасибо!
Автор: mugil_cephalus
Дата сообщения: 18.02.2010 18:26
december2010
set /?|more +78

Добавлено:
aster X
в топиках Командная строка, батники, сценарии (bat, cmd) и Задачи на bat-файлах подобный вопрос часто встречался - Ссылка
Автор: aster X
Дата сообщения: 18.02.2010 18:48
bybars

спасибо, попробую.

mugil_cephalus

тоже спасибо
Автор: december2010
Дата сообщения: 18.02.2010 20:01
есть строка
For /F "Tokens=1* Delims=" %%i In ('type 123.reg^|findstr }')

в 123.reg между симолвами } и ] нужно проставить \vars
чтобы в итоге вышло }\vars]
тоесть в переменной i символ ] я вляется последним. нужно уалить последний символ и прописать %%i\vars]

подскажите как быть.

полагаю, как-то так?
set "var1=string"
set "var2=%var1:~0,-1%"
echo %var2%
Автор: bybars
Дата сообщения: 18.02.2010 22:31
december2010
Внимательно прочитайте help FOR в части, касающейся параметра delims.
Благодаря ему можно рзбить строку на подстроки, разделителем не обязтельно должен быть пробел. Получите то, что должно быть до }, затем до ] и затем остаток
Типа
For /F "Tokens=1,2,3* Delims=}]" ...
Результат будет в %i, %j, %k
Затем эти подстроки можно склеить нужным образом. Не забудьте добавить сами символы разделителей. Их в переенных не будет.
Автор: bomzzz
Дата сообщения: 18.02.2010 22:49
у него заранее известно что в строке надо убрать первые три пробела (знака) и добавить кавычки. это проще сделать без FOR.
echo "%STRING:~3%"

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: SAS.Планета (часть 2)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.