Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии - bat, cmd

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

Открыть новую тему     Написать ответ в эту тему

Maz



Дед Мазай
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
часть 1 | часть 2 | часть 3 | часть 4 | часть 5
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [ more ].  

Смежные темы:
В помощь системному администратору > Автоматизация администрирования
Microsoft Windows > Сценарии Windows

Полезные ссылки:
· Из Windows XP Professional Product Documentation:
> Описание Cmd.exe > Command shell overview
> Using batch files > Using batch parameters > Using filters > Using command redirection operators
 
· Уроки bat-аники (для начинающих): первый и второй
· Курс из 19 лекций "Командная строка и сценарии Windows"
· Уильям Р. Станек - Командная строка Windows. Справочник администратора
 
· Выполнение BAT-скриптов без вызова окна консоли
· cmdow - изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.7z - Пакет утилит для организации интерфейса в bat-файлах
· blat - отправка почты из консоли
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)(3)
 
· Архив всевозможных версий cmd.exe (от Windows NT 3.51 до Windows 10) и command.com (DOS 5.0 и выше). Старые командные процессоры можно запускать на более новых ОС, хотя не всё может работать корректно. Подробная документация по командам cmd.exe и стандартным утилитам ОС для NT 3.51, NT 4.0, NT 5.0 (Windows 2000) и NT 5.2 (Windows Server 2003). Сборник представляет исторический интерес, а также незаменим для тех, у кого появилось желание сделать свои скрипты работоспобными не только на текущей версии ОС. Ссылки wdho.ru tinyupload.com dbree.org
 
· Сборник одним архивом: Сотни Win32 утилит командной строки, нетривиальные .cmd файлы, .bat miniperl скрипты (не требующие полноценной установки Perl), FAR Manager с плагинами и настройками, разное для DOS/DOSBox (откуда под Win32 интерес представляют три продвинутых "мультисистемных" .bat файла да ещё, может быть, оболочка Necromancer DOS Navigator с поддержкой LFN и доступом к буферу обмена Windows). Краткие описания всего - в файликах files.bbs

Всего записей: 37256 | Зарегистр. 26-02-2002 | Отправлено: 13:35 19-09-2020 | Исправлено: Maz, 07:16 24-04-2021
Fenrizz



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
notinthewoods
Наверное, сначала

Цитата:
curl -k httрs://cshive.com/model/265748 >barbaradance_01.xml  

 
а потом использовать xmllint из пакета libxml2 для парсинга этого файла  

Цитата:
xmllint.exe --html --xpath "string(//source/@src)" barbaradance_01.xml 2>nul

 
Либо использовать VBScript или PowerShell с регулярными выражениями.

Всего записей: 360 | Зарегистр. 12-09-2017 | Отправлено: 19:50 27-11-2020 | Исправлено: Fenrizz, 22:18 27-11-2020
notinthewoods

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
Класс! Получилось, спасибо.
Только задача получила продолжение)
Попытался сделать батник типа такого:
 

Цитата:
set /p name=name:  
::dirtypub
set /p url=url:  
::https://cshive.com/model/771075
 
for /f "delims=" %%a in ('curl -k %url%') do @set xml=%%a
::получить результат запроса curl и вывести в переменную xml
 
for /f "delims=" %%a in ('xmllint --html --xpath "string(//source/@src)" %xml%') do @set videourl=%%a
::извлечь с помощью xmllint переменную videourl из переменной xml
 
streamlink %videourl% best -o %name%.ts

Но с синтаксисом здесь большие проблемы. Как лучше сделать?

Всего записей: 111 | Зарегистр. 31-01-2015 | Отправлено: 23:44 27-11-2020
Fenrizz



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
notinthewoods
Думаю так  

Цитата:
set url="https://cshive.com/model/771075"  
set name=qwerty
 
FOR /F "tokens=*" %%I IN ('curl -k %url% ^| xmllint.exe --format --html --xpath "string(//source/@src)" - 2^>nul') DO (
echo %%I
SET videourl=%%I
)  
streamlink %videourl% best -o %name%.ts  

Всего записей: 360 | Зарегистр. 12-09-2017 | Отправлено: 07:02 28-11-2020 | Исправлено: Fenrizz, 09:34 28-11-2020
YuS 2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz

Цитата:
PowerShell с регулярными выражениями.

для работы powershell именно с XML, регэкспы не требуются.

Всего записей: 3190 | Зарегистр. 03-02-2009 | Отправлено: 10:54 28-11-2020
Artem_Butenko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, прошу Вашей помощи. Немного переделал сценарий чтения значений из "*.ini-файла".
Однако столкнулся с двумя трудностями:
1. Сценарий не исполняется, если в пути к пакетному файлу есть пробелы.
2. При обрамлении %~dp0Settings.ini в кавычки, чтение значений параметров из "*.ini-файла" не происходит.
Пожалуйста, помогите разобраться, что я делаю неправильно.

Всего записей: 633 | Зарегистр. 19-02-2008 | Отправлено: 11:51 28-11-2020 | Исправлено: Artem_Butenko, 11:57 28-11-2020
KiloSub



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Artem_Butenko
Попробуй при обрамлении %~dp0Settings.ini в кавычки строку через одну сделать так, вдруг поможет:

Код:
Set "SettingsINIFile=%~1"

Потом в командах %SettingsINIFile% тоже в кавычках.

Всего записей: 318 | Зарегистр. 30-05-2020 | Отправлено: 11:58 28-11-2020 | Исправлено: KiloSub, 12:09 28-11-2020
notinthewoods

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
Еще раз большое спасибо за помощь - конкретную и по существу вопроса!

Всего записей: 111 | Зарегистр. 31-01-2015 | Отправлено: 12:23 28-11-2020
Artem_Butenko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KiloSub
 

Цитата:
Попробуй при обрамлении %~dp0Settings.ini в кавычки строку через одну сделать так, вдруг поможет:
 
Код:
Set "SettingsINIFile=%~1"
 
Потом в командах %SettingsINIFile% тоже в кавычках.

 
Увы, не помогло!

Всего записей: 633 | Зарегистр. 19-02-2008 | Отправлено: 12:28 28-11-2020
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Artem_Butenko
Как ошибку ищете?
 
Добавлено:
Artem_Butenko
Советую перед каждой командой вставить echo, а после - pause. И сразу найдете, в чем проблема.

----------
Magically yours
Raistlin

Всего записей: 2988 | Зарегистр. 18-04-2005 | Отправлено: 12:35 28-11-2020
KiloSub



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Artem_Butenko
вот эти строки вроде нужно подправить:
 

Код:
If Not Exist "%SettingsINIFile%" (
...
For /f "usebackq eol=; delims== tokens=1,2" %%i In ("%SettingsINIFile%") Do (

Всего записей: 318 | Зарегистр. 30-05-2020 | Отправлено: 12:41 28-11-2020 | Исправлено: KiloSub, 12:42 28-11-2020
Artem_Butenko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
 

Цитата:
Artem_Butenko
Как ошибку ищете?  

-----
1. Сценарий не исполняется, если в пути к пакетному файлу есть пробелы.
2. При обрамлении %~dp0Settings.ini в кавычки, чтение значений параметров из "*.ini-файла" не происходит.
 

Цитата:
Добавлено:
Artem_Butenko
Советую перед каждой командой вставить echo, а после - pause. И сразу найдете, в чем проблема.

-----
Сценарий не мой, я лишь его адаптировал его под себя. Если у Вас есть решения, пожалуйста поделитесь, буду Вам благодарен.
 
Добавлено:
KiloSub
 

Цитата:
Call :Read_SettingsINIFile "%~dp0Settings.ini" || Goto :CreateSettingsINIFile


Цитата:
For /f "usebackq eol=; delims== tokens=1,2" %%i In (%SettingsINIFile%) Do (  

 
Так будет правильнее. Спасибо Вам, навели на мысль!
 
 

Всего записей: 633 | Зарегистр. 19-02-2008 | Отправлено: 12:43 28-11-2020
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Artem_Butenko

Цитата:
Сценарий не мой, я лишь его адаптировал его под себя.

Не имеет значения. После адаптации всегда нужна отладка.

----------
Magically yours
Raistlin

Всего записей: 2988 | Зарегистр. 18-04-2005 | Отправлено: 12:54 28-11-2020
Death_INN

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
reg SAVE HKLM\SAM SAM

В консоли ок. Создал батник test.cmd с одной этой строкой, но не отрабатывает, а зацикливается. ЧЯДНТ?

Всего записей: 2247 | Зарегистр. 24-10-2002 | Отправлено: 04:16 29-11-2020 | Исправлено: Death_INN, 04:18 29-11-2020
teleportex

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
привет народ.
написал команду -
Код:
 
for %A IN (служба
служба
служба) DO net stop %A
 

но это работает только если в окно cmd забивать.
для батника, как я понял нужно использовать %% вместо %
но всё равно не работает из батника.  

Всего записей: 411 | Зарегистр. 13-02-2013 | Отправлено: 13:47 30-11-2020
Fenrizz



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
teleportex
А что пишет?  
Попробуйте в одну строчку через пробел

Цитата:
for %%A IN (служба1 служба2 служба3) DO net stop %%A  

Всего записей: 360 | Зарегистр. 12-09-2017 | Отправлено: 14:15 30-11-2020 | Исправлено: Fenrizz, 14:16 30-11-2020
Inoz2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
если в окно cmd забивать
забивать несколько строк яб не догадался

Цитата:
не работает
может лень?
 
Добавлено:
всмысле, может недостаточно прав
 
 
Добавлено:
или я не прав

Всего записей: 3333 | Зарегистр. 23-04-2009 | Отправлено: 14:20 30-11-2020
teleportex

Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Fenrizz

Цитата:
Попробуйте в одну строчку через пробел

так сработало, спасибо.
на другом ресурсе пример давали с переносом строк и человек отписывался, что работает.

Всего записей: 411 | Зарегистр. 13-02-2013 | Отправлено: 14:55 30-11-2020 | Исправлено: teleportex, 14:57 30-11-2020
Fenrizz



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
teleportex
У меня тоже вариант в несколько строк работает.  
Не знаю, в чём может быть проблема, если только перенос строк в формате UNIX, а не Windows?

Всего записей: 360 | Зарегистр. 12-09-2017 | Отправлено: 16:02 30-11-2020
KiloSub



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго. Вот смотрите:

Код:
set count=0
for /f "tokens=*" %%F in ('echo portable64.dll ^& type dependentlibs.list') do (
    set /a count+=1
    if !count!==1 (
        echo %%F>dependentlibs.list
    ) else (
        echo %%F>>dependentlibs.list
    )
)

Таким способом в файл dependentlibs.list первой строчкой впишется portable64.dll, но приходится писать построчно весь этот файл. По-другому у меня не получилось, а хочется, чтобы одним махом, типа сразу весь type...>в файл и без промежуточного файла.

Всего записей: 318 | Зарегистр. 30-05-2020 | Отправлено: 21:34 30-11-2020 | Исправлено: KiloSub, 21:47 30-11-2020
Inoz2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KiloSub
вот и кстати в dependentlibs.list мне AkelPad показывает, что новые строки в UNIX-формате.
 
Добавлено:

Код:
 
set LF=^
 
 
SETLOCAL EnableDelayedExpansion
for /f "tokens=*" %%F in ('type dependentlibs.list') do set d=!d!!LF!%%F
echo portable64.dll!d!>dependentlibs.list
 

ps Две пустые строки нужны для правильной работы.
pps Возможно появление пробелов при копировании.
 
ppps Возможно появление знатоков повершела, с решением в одну строку.

Всего записей: 3333 | Зарегистр. 23-04-2009 | Отправлено: 22:08 30-11-2020
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии - bat, cmd


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru