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


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаФотогалереяГазетаКто в 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

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

cchameleone



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

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Microsoft Windows » Задачи на bat-файлах 12
 
Полезные ссылки
· Из 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 (PDF). Курс лекций для начинающих
· Бокалий В. Командная строка (pdf-брошюрка в 20 страниц)
· Александров А., Дибров А. Урок bat-аники (pdf)
· Уильям Р. Станек - Командная строка Windows. Справочник администратора
 
· Скрываем консольные окна
· cmdow — изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.zip - Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· blat — отправка почты из консоли
· Команды RunDll32
· Quick Batch File Compiler - Позволяет превратить ваш батник в независимое приложение
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
 
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)

Всего записей: 2112 | Зарегистр. 16-10-2015 | Отправлено: 09:22 29-04-2016 | Исправлено: TheBarmaley TMP, 12:35 29-04-2016
YuS_2



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

Цитата:
нужно это всем батникописателям

Как минимум, я бы ещё добавил awk и sort из этих утилит... а лучше сразу cygwin использовать и не мучиться.  
Хотя, в принципе, всё это может заменить powershell, который существует и для XP тоже.
Тут просто необходимо определиться: то ли шашечки плюс много-много времени на создание и обработку или просто ехать с ветерком, всё зависит от пользователя.

Всего записей: 1531 | Зарегистр. 03-02-2009 | Отправлено: 06:34 16-03-2017
thejustsoul



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как правильно распарсить строку (json) на переменные:

Код:
{"installer_checksum":"a3453244e63a077710f8abab15ab04fd28909fba17e7e98aa9cb9d4398dd774c","installer":"http://dl.opera.com/download/get/?id=41004&autoupdate=1&ni=1&stream=stable","installer_filename":"Opera_43.0.0.244223117_i386_Setup.exe","installer_size":43334920,"url_welcome":"http://redir.opera.com/www.opera.com/firstrun/?http_referrer=&query=","installer_arch":"i386"}

 
Раньше делал обрезку строки посимвольно, но это костыль, хотелось бы более стабильного варианта.
Еще попробовал так:

Код:
for /f "tokens=1 delims=," %%a in (tmp.json) do (
    echo %%a
    for /f "tokens=2 delims=:" %%b in ("%%a") do @set opHash=%%~b
)
echo.
for /f "tokens=2 delims=," %%a in (tmp.json) do (
    echo %%a
    for /f "tokens=3 delims=:" %%b in ("%%a") do @set opUrl=%%~b
)
echo.
for /f "tokens=3 delims=," %%a in (tmp.json) do (
    echo %%a
    for /f "tokens=2 delims=:" %%b in ("%%a") do @set opDist=%%~b
)
 
echo.
echo.---------------------------
echo.
echo hash - %opHash%
echo url - "https:%opUrl%
echo dist - %opDist%
echo.

 
Вывод скрипта:

Цитата:
{"installer_checksum":"a3453244e63a077710f8abab15ab04fd28909fba17e7e98aa9cb9d4398dd774c"
 
"installer":"http://dl.opera.com/download/get/?id=41004&autoupdate=1&ni=1&stream=stable"
 
"installer_filename":"Opera_43.0.0.244223117_i386_Setup.exe"
 
---------------------------
hash - a3453244e63a077710f8abab15ab04fd28909fba17e7e98aa9cb9d4398dd774c
url - "https://dl.opera.com/download/get/?id=41004&autoupdate=1&ni=1&stream=stable"
dist - Opera_43.0.0.244223117_i386_Setup.exe
 

 
Но это тоже почти костылище, в общем, надеюсь доступно описал, подскажите решение?
 
Может надо как-то брать подстроку между кавычками.. но у меня не получилось..
 
UPD:
нашел такой вариант, не знаю насколько он корректен..

Код:
for /f "tokens=2 delims=," %%a in (tmp.json) do (
    for /f delims^=^"^ tokens^=3 %%b in ("%%a") do @set opUrl=%%b
    echo url - "%opUrl%"
)

Всего записей: 1401 | Зарегистр. 30-03-2014 | Отправлено: 07:09 21-03-2017 | Исправлено: thejustsoul, 07:49 21-03-2017
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
thejustsoul
Для парсинга JSON очень рекомендуется сначала обработать его предназначенными для этого утилитами, а потом уже парсить их вывод. Я использую JQ например.

Всего записей: 4771 | Зарегистр. 11-03-2002 | Отправлено: 09:11 21-03-2017
YuS_2



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

Цитата:
как правильно распарсить строку (json) на переменные

1. Образец того, что надо парсить - есть, а вот что именно необходимо получить в переменную - не вижу. Примеров строк лучше прибавить несколько, особенно если в них есть различия.
2. Порядок следования подстрок всегда одинаковый или они могут изменять местоположение?
3. Все ли подстроки всегда присутствуют или какие-то могу отсутствовать?

Всего записей: 1531 | Зарегистр. 03-02-2009 | Отправлено: 09:14 21-03-2017
redson



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужна помощь по батнику. Не работает в батнике следующий код:
 
set unpacked_archive_folder=%temp%\data
cd %unpacked_archive_folder%\testdisk* && testdisk_win.exe

 
причем если запустить голый cmd и руками набрать команду например cd testdisk* && testdisk_win.exe , то все отрабатывает.
 
суть кода это войти в каталог %temp%\data\testdisk-7.1-WIP (т.к версия программы иногда меняется хочу использовать звездочку *) и если есть успешный вход в каталог, то запустить testdisk_win.exe
 
батник упорно пытается запустить testdisk_win.exe из каталога где лежит сам батник

Всего записей: 948 | Зарегистр. 23-04-2007 | Отправлено: 11:11 21-03-2017 | Исправлено: redson, 11:16 21-03-2017
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
redson
Не нужно никаких звездочек. Можно использовать FOR /D, например.
...... хотя, можно попробовать CD /D (добавить ключ /D, для смены диска)

Всего записей: 4771 | Зарегистр. 11-03-2002 | Отправлено: 11:19 21-03-2017 | Исправлено: Pasha_ZZZ, 11:22 21-03-2017
redson



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

Цитата:
Не нужно никаких звездочек. Можно использовать FOR /D, например.
...... хотя, можно попробовать CD /D (добавить ключ /D, для смены диска)

на моем примере по подробнее можно?

Всего записей: 948 | Зарегистр. 23-04-2007 | Отправлено: 11:30 21-03-2017
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
redson
Цитата:
cd /d %unpacked_archive_folder%\testdisk* && testdisk_win.exe


Всего записей: 4771 | Зарегистр. 11-03-2002 | Отправлено: 11:45 21-03-2017
redson



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

Цитата:
cd /d %unpacked_archive_folder%\testdisk* && testdisk_win.exe  

спасибо, работает, ты как всегда на высоте )

Всего записей: 948 | Зарегистр. 23-04-2007 | Отправлено: 12:34 21-03-2017
ndch

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос наверное глупый, но сталкиваюсь первый раз. Самостоятельно не могу ни разобраться, ни нагуглить.
ОС - win 7 x64 sp1 rus
Есть виндовая шара. На ней лежит rar.exe
Составит батник:
\\winsrv7\#rollup\bin\Rar.exe
\\winsrv7\#rollup\bin\Rar.exe
\\winsrv7\#rollup\bin\Rar.exe
pause
 
Я предполагаю что 3 раза запустится Rar.exe
на деле же получается следующее:

Код:
 
C:\Windows\system32>\\winsrv7\#rollup\bin\Rar.exe
 
RAR 5.40 x86   Copyright (c) 1993-2016 Alexander Roshal   15 Aug 2016
Trial version             Type RAR -? for help
 
C:\Windows\system32>\\winsrv7\#rollup\bin\Rar.exe
Системе не удается найти указанный путь.
 
C:\Windows\system32>\\winsrv7\#rollup\bin\Rar.exe
Системе не удается найти указанный путь.
 
C:\Windows\system32>pause
Для продолжения нажмите любую клавишу . . .

 
 
У меня вопросы:
1. почему ПЕРВЫЙ раз запускается Rar.exe, а в остальных случаях - "Системе не удается найти указанный путь." ?
2. Что делать ?
 
PS. на win8.1  - работает нормально, т.е. Rar.exe запускается три раза.
PSS. Я бы ещё задумался, если бы запускал экзешник с относительным путём,  но здесь ведь "абсолютный": \\winsrv7\#rollup\bin\Rar.exe

Всего записей: 4447 | Зарегистр. 31-08-2008 | Отправлено: 14:20 21-03-2017 | Исправлено: ndch, 14:36 21-03-2017
thejustsoul



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
Цитата:
Для парсинга JSON очень рекомендуется сначала обработать его предназначенными для этого утилитами, а потом уже парсить их вывод. Я использую JQ например.

Это понятно, но не хочется использовать что-то внешнее, если можно обойтись имеющимися возможностями -)
 
 
YuS_2

Цитата:
1. Образец того, что надо парсить - есть, а вот что именно необходимо получить в переменную - не вижу. Примеров строк лучше прибавить несколько, особенно если в них есть различия.
2. Порядок следования подстрок всегда одинаковый или они могут изменять местоположение?
3. Все ли подстроки всегда присутствуют или какие-то могу отсутствовать?

1. В переменные надо получить хеш, урл и имя дистрибутива, в "Вывод скрипта" добавил же что должно быть -)
2. Наверно одинаковые, но кто их знает, могут и поменять потом.
3. Наверно всегда, но если их нет, то это надо обрабатывать вручную (тут это не нужно учитывать).
 
ndch
Попробуйте так:

Код:
 
pushd "\\winsrv7\#rollup\bin"
Rar.exe
Rar.exe
Rar.exe
popd
pause
 

Всего записей: 1401 | Зарегистр. 30-03-2014 | Отправлено: 00:05 22-03-2017
YuS_2



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

Цитата:
не хочется использовать что-то внешнее, если можно обойтись имеющимися возможностями


Цитата:
1. В переменные надо получить хеш, урл и имя дистрибутива, в "Вывод скрипта" добавил же что должно быть -)  
2. Наверно одинаковые, но кто их знает, могут и поменять потом.  
3. Наверно всегда, но если их нет, то это надо обрабатывать вручную (тут это не нужно учитывать).  

Вопросы были не от праздного любопытства...  
Дело в том, что в cmd парсить json не совсем продуктивно и если вдруг там изменится состав параметров, либо порядок следования, то весь код псу под хвост пойдет... а если есть ещё и спецсимволы в строке, то тоже та ещё радость...
 
А так, что-то более универсальное, можно так сделать:

Код:
@echo off
for /f "tokens=1-3 delims=," %%a in (
    'powershell -executionpolicy bypass .\script.ps1'
) do set "opHash=%%a"&set "opUrl=%%b"&set "opDist=%%c"
setlocal enabledelayedexpansion
echo hash - "!opHash!"
echo url - "!opUrl!"
echo dist - "!opDist!"
pause

 
script.ps1 :

Код:
gc test.json|%{
    $a = $_ -replace '^.*?installer_checksum\"?:\"?([0-9a-f]+).*','$1'
    $b = $_ -replace '^.*?installer\"?:\"?([^"]+).*','$1'
    $c = $_ -replace '^.*?installer_filename\"?:\"?([^"]+).*','$1'
    $a+","+$b+","+$c
}

 
и вообще, пора переходить на powershell, как на более вменяемый инструмент

Всего записей: 1531 | Зарегистр. 03-02-2009 | Отправлено: 20:57 21-03-2017
Pasha_ZZZ



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
YuS_2
А еще JS/VBS/AutoIt/C/VB etc... но это уже совсем про другие топики...

Всего записей: 4771 | Зарегистр. 11-03-2002 | Отправлено: 00:17 22-03-2017
YuS_2



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

Цитата:
А еще JS/VBS/AutoIt/C/VB etc

Ну, это уже на выбор (лично мне больше powershell нравится) и да, с их обсуждением в соответствующие места придется пройти

Всего записей: 1531 | Зарегистр. 03-02-2009 | Отправлено: 14:25 22-03-2017
thejustsoul



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2
Спасибо, но powershell это уже другой язык, его нужно изучать отдельно, я же хотел на чистом bat\cmd -)
Понятно, что можно другие языки использовать, и они даже лучше чем cmd, но..

Всего записей: 1401 | Зарегистр. 30-03-2014 | Отправлено: 17:11 22-03-2017
VVL99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuS_2 - пост
Цитата:
и вообще, пора переходить на powershell, как на более вменяемый инструмент  

А можно powershell(ом) заменить bat и vbs, на сколько он функционален?

----------
Мои работы

Всего записей: 908 | Зарегистр. 03-02-2011 | Отправлено: 17:50 22-03-2017 | Исправлено: VVL99, 17:50 22-03-2017
YuS_two



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VVL99  22-03-2017

Цитата:
можно powershell(ом) заменить bat и vbs, на сколько он функционален?

А почему нет?
Но:
 22-03-2017

Цитата:
с их обсуждением в соответствующие места придется пройти


Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 18:02 22-03-2017
manginins

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток.Помогите нужен бат который будет закрывать или прибивать процесс(программу)при открытии диспетчера задач.И запускать при закрытии диспетчера.Заранее благодарю

Всего записей: 2 | Зарегистр. 23-03-2017 | Отправлено: 02:56 23-03-2017
thejustsoul



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

Цитата:
Доброго времени суток.Помогите нужен бат который будет закрывать или прибивать процесс(программу)при открытии диспетчера задач.И запускать при закрытии диспетчера.Заранее благодарю

Пробуйте:

Код:
@echo off
:loop
cls
tasklist | find /i "taskmgr.exe">nul 2>&1
if %errorlevel% EQU 0 (
    tasklist | find /i "Project1.exe">nul 2>&1
    if %errorlevel% NEQ 0 goto loop
        taskkill /IM "Project1.exe" /F>nul 2>&1
    goto loop
)
tasklist | find /i "Project1.exe">nul 2>&1
if %errorlevel% NEQ 0 start "" "D:\MyProgs\Project1.exe">nul 2>&1
goto loop

Можно добавить задержки между поисками процессов, типа:  

Код:
timeout /t 5 /nobreak>nul

Всего записей: 1401 | Зарегистр. 30-03-2014 | Отправлено: 07:29 23-03-2017 | Исправлено: thejustsoul, 07:32 23-03-2017
vasyosuol_24

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я так понимаю, от альтернативного диспетчера задач это не спасёт. А их - тьма

Всего записей: 208 | Зарегистр. 16-01-2013 | Отправлено: 07:48 23-03-2017
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

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

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru