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

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

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

Maz (19-09-2020 13:36): Командная строка, батники, сценарии (bat, cmd) Часть 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

cchameleone



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

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

Всего записей: 2271 | Зарегистр. 16-10-2015 | Отправлено: 09:22 29-04-2016 | Исправлено: Maz, 08:47 26-03-2020
YuS_2



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

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

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

Всего записей: 3199 | Зарегистр. 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%"
)

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



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

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



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

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

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

Всего записей: 3199 | Зарегистр. 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 из каталога где лежит сам батник

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



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

Всего записей: 10082 | Зарегистр. 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, для смены диска)

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

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



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


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



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

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

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

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

Gold 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

Всего записей: 5362 | Зарегистр. 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
 

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



Silver 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, как на более вменяемый инструмент

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



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

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



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

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

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

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



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

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

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

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

----------
Гомосексуальность среди модераторов не является психическим расстройством, несмотря на синонимы этого понятия в русском языке.

Всего записей: 4158 | Зарегистр. 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

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

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

Всего записей: 790 | Зарегистр. 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии (bat, cmd)
Maz (19-09-2020 13:36): Командная строка, батники, сценарии (bat, cmd) Часть 6


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru