Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 8

Автор: wolf0425
Дата сообщения: 30.06.2010 08:42

Цитата:
Приветствую всех. Подскажите, пожалуйста, существует ли способ настроить стандартный вывод так, чтобы игнорировались (отбрасывались) пустые строки? Фильтр "Find", насколько я понимаю, здесь не помошник.
зато findstr -r . поможет

Добавлено:
Цитата:
счетчик поставить
заодно поставив в начало setlocal enabledelayedexpansion - чтоб тот счетчик можно было внутри цикла проверять хотя бы как !переменную!

реально на две строки проще со !счетчиком! ещё не заморачиваться, просто на первом проходе установить заранее удаленную переменную, а второй проход определить по существованию переменной, а не по значению. если надо ловить три прохода - проще сразу делать !счетчик!
Автор: BVV63
Дата сообщения: 30.06.2010 09:04
mugil_cephalus
wolf0425
По второму вопросу - понял, спасибо.
А насчёт пустых строк, так я итак для их удаления использую for, но возникают разные затруднения. Думал, может ещё что-нить можно применить. More /s тоже не совсем выход, он до конца пустые строки не убирает. Других идей нету?
Автор: wolf0425
Дата сообщения: 30.06.2010 09:14

Цитата:
А насчёт пустых строк,
Других идей нету?
на случай если тебе лениво самому читать хэлп findstr я тебе даже ключики написал для фильтра...
Автор: BVV63
Дата сообщения: 30.06.2010 09:23
wolf0425
О, приношу извинение. Как-то не заметил Ваш ответ по данному вопросу. Сосредоточился на другом вопросе .

Добавлено:
wolf0425
Чёй-то не помогает "findstr -r .". Вот простой пример, где в выводе есть пустые строки:
Net Time /Domain:<домен> /Set /Yes | FindStr -r .
Вывод одинаков, что без фильтра, что с ним.
Автор: BVV63
Дата сообщения: 30.06.2010 11:24
Прошу прощения, ошибся. Действительно, пустые строки удалились.

Добавлено:
Правда, не во всех случаях. В приведённом выше примере ежели домен указать несуществующий, то пустые строки остаются.
Автор: ComradG
Дата сообщения: 30.06.2010 11:55
res2001
wolf0425
mugil_cephalus

Анзиппинг http://forum.ru-board.com/topic.cgi?forum=33&topic=1491&start=1700
Можно вставлять в баты, но, полагаю, это будет не особо практично. Как думаете?
Автор: wolf0425
Дата сообщения: 30.06.2010 12:47
BVV63
Цитата:
Правда, не во всех случаях. В приведённом выше примере ежели домен указать несуществующий, то пустые строки остаются.
они остаются потому что в фильтр не попадают, идут прямо на экран. попробуй
Net Time /Domain:<домен> /Set /Yes 2>&1 | FindStr -r .

Добавлено:
ComradG
Цитата:
Можно вставлять в баты, но, полагаю, это будет не особо практично. Как думаете?
практично или не практично - можно будет сказать после того как приведешь код в пригодное для вызова из бата состояние.
т.е. разбор аргументов командной строки пока не хватает.

хотя в общем-то проблем с распаковкой обычно и так нет - обычно в таких случаях просто носят sfx.
А вот запаковать что-то уж не помню встроенными виндовыми средствами - однажды хотелось.

Автор: us0r
Дата сообщения: 30.06.2010 15:24
jek1976
Надо бы мысли синхронизировать...
В принципе профили Default User и %userprofile% мало чем отличаются (в силу того, что при установке из Default User профиля копируется всё в папку новосозданного юзера) за исключением, пожалуй, NTUSER.DAT и пары ещё файлов (NTUSER.DAT вроде является пользовательским кустом [веткой, если угодно] реестра...)... Поэтому что- то тереть безопасно, а что- то просто так и не сотрёшь...
Тебе надо всё что вновь было создано дублировать на, скажем, диск D:\ и после чего килять всё на диске C:\. Ну а если сервак доступен- тогда всё на сервак засасывать, а потом килять?
Автор: anton1209
Дата сообщения: 30.06.2010 16:52
Необходимо сделать батник, который будет действовать так:
Выводит на экран названия программ:

1. Программа 1
2. Программа 2

Если пользователь нажмет 1, то будет загружена первая программа с помощью wget, если 2, то вторая.
wget лежит в папке с батником.
Батник должен закрываться только после окончания загрузки wget`ом.

Спасибо.
Автор: ComradG
Дата сообщения: 30.06.2010 16:57
wolf0425

Цитата:
можно будет сказать после того как приведешь код в пригодное для вызова из бата состояние

Вэбээска писалась изначально для "просто" анзипа - ты ведь читал мой пост, что я малость притормаживаю. На счет параметров я не совсем уловил ход твоих мыслей: ты имеешь в виду, чтобы бат скармливал vbs-ке зип, который нужно распаковать, и папку, в которую должна производиться распаковка? Если так, то не знаю насколько это возможно. А на счет того при чем тут вообще бат - можно было бы загенерить с помощью батника vbs, которой бы скармливался зип и т.д. Словом, тут есть над чем подумать.

Цитата:
А вот запаковать что-то уж не помню встроенными виндовыми средствами - однажды хотелось.

Через системный шелл это можно сделать. Я тут накидывал скрипт (тоже vbs), но он немного криво работает.

Добавлено:
anton1209

Код: echo 1.Program
echo 2.Program
2>nul set /p choose="1.Program 2.Program"
if /i %choose%==1 goto:first_program
if /i %choose%==2 goto:second_program
Автор: res2001
Дата сообщения: 30.06.2010 17:08
anton1209
На 121 странице lorents выкладывал свой батник, который делает примерно то же что и тебе надо (он там картинки обрабатывает). Возьми его за пример, переделай для использования wget.
Автор: ComradG
Дата сообщения: 30.06.2010 17:13
res2001
А у тебя какие соображения по поводу поста выше? Стоит ли развивать идею или нет?
Да! На счет штампов времени: их можно изменить, но через vbs. Как я ни старался через батники ничего путного не выходит.
Автор: us0r
Дата сообщения: 30.06.2010 17:34
anton1209

Код: @ECHO OFF
CLS
:choise
SET /P ANSW="CHOiSE:"
IF /I "%ANSW%"=="1" START "VARIANT 1" /WAIT WGET тутПараметрыЗапуска && goto :eof
IF /I "%ANSW%"=="2" START "VARIANT 2" /WAIT WGET тутПараметрыЗапуска && goto :eof
ECHO WHAT?!
:goto choise
Автор: res2001
Дата сообщения: 30.06.2010 17:38
ComradG

Цитата:
Стоит ли развивать идею или нет?

Мысль понятна. Никогда не пытался такое делать, надо почитать доку по NameSpace.
Думаю кому интересно будет, тот сам под себя подгонит, а так функция выглядит вполне работоспособной для VBS.
Автор: ComradG
Дата сообщения: 30.06.2010 17:39
wolf0425
Глянь на счет зиппинга средствами системы - только что наткнулся тут
Автор: res2001
Дата сообщения: 30.06.2010 17:39
us0r

Цитата:
Ага, чуток обработать...

ну да, лишнего повыкидывать.
Автор: ComradG
Дата сообщения: 30.06.2010 17:41
res2001
Ты тоже глянь. Там правда скрипт уж больно на мой похож.

Добавлено:
Блин, не просто похож, а процетировал прям дословно. Бывают же досадные совпадения.

Добавлено:
Что это за ахенея

Код: set filename=c:\program files\example\file.zip\folder 1\test.doc
set findpath=%filename:.zip/=.zip/!%
echo %findpath%
Автор: wolf0425
Дата сообщения: 30.06.2010 18:31
ComradG
Цитата:
Вэбээска писалась изначально для "просто" анзипа - ты ведь читал мой пост, что я малость притормаживаю.
фигня, зато у тебя там кондиционер, а в Москве - жара.
Но все равно выздоравливай быстрее - нефиг разлеживаться


Цитата:
На счет параметров я не совсем уловил ход твоих мыслей: ты имеешь в виду, чтобы бат скармливал vbs-ке зип, который нужно распаковать, и папку, в которую должна производиться распаковка? Если так, то не знаю насколько это возможно.
разбор входных параметров, передаваемых в коммандной строке - в общем-то обычное дело, на память для vbs не помню но пример найти несложно.
тут другая засада - то что ты привел - это процедура, её ещё вызывать из чего-то надо, просто так записанное в vbs не заработает - или шапка нужна или отрезать что. а vbs я знаю ну очень поверхностно


Цитата:
А на счет того при чем тут вообще бат - можно было бы загенерить с помощью батника vbs, которой бы скармливался зип и т.д.
ну, передавать имена зипа и адреса распаковки на этапе генерации кода - тоже конечно вариант, но правильнее аргументы разобрать.


Цитата:
Что это за ахенея
эта замена подстроки в строке, только что-то я совпадающей подстроки там не вижу....
Автор: ComradG
Дата сообщения: 30.06.2010 18:49
wolf0425

Цитата:
только что-то я совпадающей подстроки там не вижу....

Вот и я про это же! Интересно, товарищ, который сие публиковал в своем блоге знал об этом?

Цитата:
но правильнее аргументы разобрать

Наверное ты прав. Просто саму функцию вызывать в той же vbs не очень удобно.

Цитата:
vbs я знаю ну очень поверхностно

Тоже страдал оным, пока не прогулялся по этому адресу. И самое смешное начинал с вот этого. Кстати, там дамп статей в формате chm имеется. Хотя все же доминирующим в плане интересов у меня остаются именно батники и скрипты PowerShell.
Да!!! Главное, что я хотел сказать! Debug довольно интересная штучка. Я тут поэксперементировал и пришел к весьма интересным выводам: при базовом знании ассемблера и наличии WinDbg в системе можно через батники создавать COM приложения. Правда оным дело не ограничивается: с помощью Debug в пакетном режиме можно хачить игрушки защищенные SecuROM'ом (правда получается пока довольно криво).

Цитата:
Но все равно выздоравливай быстрее

Спасибо.

Цитата:
нефиг разлеживаться

Я про тоже

Добавлено:
Цитирую сам себя:

Цитата:
можно через батники создавать COM приложения

Идея была подчерпнута отсюда
Автор: anton1209
Дата сообщения: 30.06.2010 19:21
us0r,


Цитата:

anton1209

Код:@ECHO OFF
CLS
:choise
SET /P ANSW="CHOiSE:"
IF /I "%ANSW%"=="1" START "VARIANT 1" /WAIT WGET тутПараметрыЗапуска && goto :eof
IF /I "%ANSW%"=="2" START "VARIANT 2" /WAIT WGET тутПараметрыЗапуска && goto :eof
ECHO WHAT?!
:goto choise


То или не то?

Добавлено:
res2001
Ага, чуток обработать...


Батник работает, но варианты не выводит

P.S. , Разобрался СПС!


Цитата:

@ECHO OFF
CLS
:choise
echo [1] Dr.Web CureIT
echo [2] F-Secure
SET /P ANSW="Please select"
IF /I "%ANSW%"=="1" START "Dr.Web CureIT" /WAIT WGET -P %cd%/drweb_cureit http://www.freedrweb.com/download+cureit/gr/?lng=ru && goto :eof
IF /I "%ANSW%"=="2" START "F-Secure" /WAIT WGET -P %cd%/fsecure_is2010 http://download.f-secure.com/estore/fs2010.exe && goto :eof
ECHO WHAT?!
:goto choise
Автор: BVV63
Дата сообщения: 01.07.2010 05:31
Приветствую всех.
Недавно мы тут рассуждали об батнике-отладчике для бат-файлов. Ну, что ж, мои "оппоненты" привели достаточно серьёзные доводы против. Но я всё же подумал, что если батник нельзя создать, то бинарную прогу-то наверняка можно. Обратился к приятелю-кодеру. Тот посмеялся... А сегодня кинул мне по почте ссылку на сайт производителя тагой проги: http://www.steppingsoftware.com/ . Прога называется "Running Steps". Жаль, триальная, 30 дней, а в нашем варезнике её нет.
Может кому интересно будет...
Автор: AZJIO
Дата сообщения: 01.07.2010 05:50
Сделал batch.xml для Notepad++. Удобная штука для новичков, для изучения. Файл нужен для автоподстановки (автозавершение функций). Всплывает окно, которое можно растянуть, посмотреть команды, или просто нажать Enter для вставки. Наверно такой файл нужно делать каждому под себя, редактируется легко.
batch для notepad++.7z
Автор: BVV63
Дата сообщения: 01.07.2010 06:27
Сталкнулся с такой проблемой.
"Net Time" не изменяет переменную "ErrorLevel" в случае неудачной попытки синхронизации времени. Поэтому я использовал такую схему: "Net Time ... || Set ErrorLevel=1", для дальнейшей обработки ошибки (ну, или можно после || обрабатывать её сразу без промежуточной "ErrorLevel"). Но после того, как решил удалить из вывода лишние пустые строки посредством "| Find -r . 2>&1" то после этого перенаправления оператор || перестал работать. Подскажите, пожалуйста, как-то можно выкрутиться? Чтобы и вывод не пострадал, и батник получил бы данные об ошибке.

Добавлено:
Ладно, бес с ним. Можно прогу дважды выполнить. Один раз для результата, другой - для "доклада". Но!.. После перенаправления батник отказывается напрочь работать с %ErrorLevel% (Echo %ErrorLevel%, а в ответ - тишина). Причём не только в данной процедуре (или подпрограмме?), но и в родительском батнике. Как после перенаправления вернуть всё на круги своя? Т. е. чтобы STDERR снова нормально фунциклировал.
Автор: res2001
Дата сообщения: 01.07.2010 07:44
BVV63

Цитата:
Более того, после перенаправления батник отказывается напрочь работать с %ErrorLevel% (Echo %ErrorLevel%, а в ответ - тишина). Как после перенаправления вернуть всё на круги своя?

После перенаправления значение errorlevel по любому будет уже не верно, оно будет тем, что установила команда find, а не net time. Я бы посоветовал с net time отправлять в файл >>nettime.log, а потом уже разбирать этот лог findом.


Цитата:
"Net Time" не изменяет переменную "ErrorLevel" в случае неудачной попытки синхронизации времени. Поэтому я использовал такую схему: "Net Time ... || Set ErrorLevel=1", для дальнейшей обработки ошибки (ну, или можно после || обрабатывать её сразу без промежуточной "ErrorLevel").

1.Руками errorlevel устанавливать не стоит. Если уж так хочется заведи переменную с другим именем.
2.действительно, лучше обрабатывать сразу.
3.раз уж net time не устанавливает значение errorlevel, то, по моему, и оператор || будет отрабатывать не верно.

Похоже команда net действует аналогично sc, т.е. сама она фактически ничего не делает, а дает команду соответствующим службам. Если у службы ничего не получилось, это еще не означает, что net выполнилась с ошибкой.
Автор: BVV63
Дата сообщения: 01.07.2010 07:47
res2001
Пока Вы отвечали я чуток исправил свой вопрос. Можно дважды сподряд выполнить команду, раз - для результата, второй - для "доклада". Но как мне восстановить после бывшего перенаправления STDERR?

Добавлено:
res2001

Цитата:
3.раз уж net time не устанавливает значение errorlevel, то, по моему, и оператор || будет отрабатывать не верно.

Нет он отрабатывал верно. Я давно заметил, что он работает и тогда, когда не помогает %ErrorLevel%. Не знаю, чем объяснить, но проверил на практике.
Автор: res2001
Дата сообщения: 01.07.2010 07:52

Цитата:
А сегодня кинул мне по почте ссылку на сайт производителя тагой проги: http://www.steppingsoftware.com/

Собственно, никто не говорил, что таких продуктов нет. Смысл наших постов сводится к тому, что надобность в таком отладчике сомнительная, поскольку хватает и стандартных средств.
Такой отладчик будет полезен либо тому кто без него не представляет работы, либо на какой-нить фабрике батов, где занимаются разработкой софта исключительно на батниках

Интересно сколько экземпляров этого отладчика продала фирма производитель?

ЗЫ: видел в свое время серьезную разработку выполненную на языке шела под соляркой. Но на батниках ничего подобного не встречал.

Добавлено:
BVV63

Цитата:
Нет он отрабатывал верно. Я давно заметил, что он работает и тогда, когда не помогает %ErrorLevel%. Не знаю, чем объяснить, но проверил на практике.

хорошо если так.

Цитата:
Но как мне восстановить после бывшего перенаправления STDERR?

можно разные дескрипторы перенаправлять в разные файлы:
net time 1>>good.log 2>>err.log
Автор: BVV63
Дата сообщения: 01.07.2010 08:00
res2001

Цитата:
можно разные дескрипторы перенаправлять в разные файлы:
net time 1>>good.log 2>>err.log

Не хотелось бы. Т. е. после перенаправления 2>&1, всё, уже стандартный вывод ошибок не восстановить? Что ж, тогда от перенаправления придётся отказаться...
Автор: mugil_cephalus
Дата сообщения: 01.07.2010 08:19
BVV63

Цитата:
При включенной расширенной обработке команд доступны несколько переменных
среды, которые не отображаются в списке, отображаемом при вызове команды SET.
Значения этих переменных вычисляются динамически каждый раз при их извлечении.
Если пользователь явно задает переменные с одним из этих имен,
то это определение перекрывает соответствующее динамическое определение,
описанное ниже:


%CD% - раскрывается в строку текущей директории.

%DATE% - раскрывается в текущую дату, используя тот же формат команды DATE.

%TIME% - раскрывается в текущую дату, используя формат команды TIME.

%RANDOM% - раскрывается в случайное десятичное число между 0 и 32767.

%ERRORLEVEL% - раскрывается в текущее значение ERRORLEVEL

%CMDEXTVERSION% - раскрывается в текущее значение версии
расширенной обработки команд.

%CMDCMDLINE% - раскрывается в исходную командную строку, которая вызвала
командный процессор.

выполни в батнике с net любые команды и errorlevel всегда будет один и тот же - 1 , как ты егои установил

Цитата:
|| Set ErrorLevel=1",

http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=1380#12
Автор: BVV63
Дата сообщения: 01.07.2010 08:27
res2001

Цитата:
После перенаправления значение errorlevel по любому будет уже не верно, оно будет тем, что установила команда find, а не net time.

Решил проверить:
Net Time /Domain:<домен> /Set /Yes | FindStr /R . || Echo Failure!
Когда подставлял несуществующий домен отрабатывало эхо, когда правильный - нет.
Автор: mugil_cephalus
Дата сообщения: 01.07.2010 08:35
BVV63

Цитата:
Net Time /Domain:<домен> /Set /Yes | FindStr /R . || Echo Failure!

в этом примере echo работает по результатам findstr

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


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