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

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

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

Maz (20-06-2024 22:42): Командная строка, батники, сценарии - bat, cmd (7 часть)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 200 201

   

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.10 до Windows 11 +Win95cmd +ReactOS) и command.com (DOS 5.0 и выше). Старые командные процессоры можно запускать на более новых ОС, хотя не всё может работать корректно. Подробная документация по командам cmd.exe и стандартным утилитам ОС для NT 3.51, NT 5.0 (Windows 2000) и NT 5.2 (Windows Server 2003). Сборник представляет исторический интерес, а также незаменим для тех, у кого появилось желание сделать свои скрипты работоспобными не только на своей версии ОС.
 
· Большой сборник одним архивом: Сотни Win32 утилит командной строки, нетривиальные .cmd файлы, .bat miniperl скрипты (не требующие полноценной установки Perl), FAR Manager с плагинами и настройками, разное для DOS/DOSBox (откуда под Win32 интерес представляют три продвинутых "мультисистемных" .bat файла да ещё, может быть, оболочка Necromancer DOS Navigator с поддержкой LFN и доступом к буферу обмена Windows). Краткие описания всего - в файликах files.bbs

Всего записей: 39128 | Зарегистр. 26-02-2002 | Отправлено: 13:35 19-09-2020 | Исправлено: metatrop, 07:55 29-11-2022
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzz
Для поставленной задачи (удалить знак вопроса и всё после него) - корректная.
 

Цитата:
будет работать?

Смотря как реализуете и каковы входные данные.

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

Всего записей: 4132 | Зарегистр. 18-04-2005 | Отправлено: 15:21 21-05-2021
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
сделал. огромное спаисбо за советы и наставления

Всего записей: 3523 | Зарегистр. 29-03-2016 | Отправлено: 15:55 21-05-2021 | Исправлено: bomzz, 17:09 21-05-2021
Egor2020

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не знаю, в какой теме это написать, поэтому я напишу сюда. Заранее извините меня, если я не туда написал.
У меня есть Firefox-расширение User-Agent Switcher and Manager версии 0.4.4, которое позволяет подменять юзер-агенты на сайтах. Данное расширение хранит свою базу данных юзер-агентов в файлах формата JSON. Эти файлы имеют следующий вид:
Подробнее...
Мне нужен BAT-файл, который вытаскивает все юзер-агенты из всех JSON-файлов и сохраняет их в TXT-файле. Копипастить по одному юзер-агенту очень долго и утомительно. Заранее спасибо.
P.S. Ссылка на набор JSON-файлов с юзер-агентами: https://disk.yandex.ru/d/QqjVs-6sqCNXag

Всего записей: 1726 | Зарегистр. 01-03-2020 | Отправлено: 18:33 31-05-2021
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Egor2020
Это лучше делать на Powershell. Что-нибудь вроде
Код:
powershell -nologo -Command "Get-ChildItem -Path '.\browsers\*'|Get-content |ConvertFrom-Json"

Такие вопросы лучше задавать в топике "Сценарии для Windows (Microsoft Windows)", там спецов больше тусуется.
 
P.S. Выдрать все "ua" из всех джейсонов в папке "browsers" и записать в текстовик "ua.txt":
Код:
chcp 65001 & powershell -NoLogo -Command "(Get-ChildItem -Path '.\Browsers\*' -Include *.json | Get-content | ConvertFrom-Json).ua" >ua2.txt

 
P.P.S. Исправлено соласно замечаний kraeved

----------
http://www.imho.ws

Всего записей: 2655 | Зарегистр. 12-10-2006 | Отправлено: 20:07 31-05-2021 | Исправлено: BorlandIMHO, 07:13 01-06-2021
Fenrizz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Egor2020
Для таких случаев есть консольный парсер JSON - https://stedolan.github.io/jq/download/
 
В данном случае будет примерно так:

Код:
 
@echo off
FOR %%G in (*.json) do (
type "%%G" | jq-win64.exe --raw-output ".[].ua" >"%%~nG.txt" )
 

Всего записей: 690 | Зарегистр. 12-09-2017 | Отправлено: 23:03 31-05-2021 | Исправлено: Fenrizz, 23:06 31-05-2021
BorlandIMHO

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

Цитата:
В данном случае будет примерно так:

Аналогичный результат ("ua из каждого json в папке Browsers в отдельный файл") на powershell:
Код:
powershell -NoLogo -Command "(Get-ChildItem -Path '.\Browsers\*' )|ForEach {($_|Get-content |ConvertFrom-Json).ua|Out-File -FilePath $('.\ua.'+$_.Name.Substring(0,$_.Name.length-5)+'.txt') -Encoding utf8"}
 

 
Fenrizz
Специализированный инструмент - это замечательно; подозреваю, что программа на чистом Си даже будет несколько шустрее, нежели повершельный аналог. Однако же, повершелл по умолчанию есть на любой винде начиная с Vista - в отличие от инструмента, который требуется либо распространять совместно со скриптом, либо скачивать отдельно каждый раз при запуске на новой машине...
 
P.S. Исправлено соласно замечаний kraeved

----------
http://www.imho.ws

Всего записей: 2655 | Зарегистр. 12-10-2006 | Отправлено: 01:19 01-06-2021 | Исправлено: BorlandIMHO, 07:18 01-06-2021
kraeved



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Egor2020
В папке запустите powershell -command "(gc *.json | convertfrom-json).ua | sc ua.txt"
Если нервирует тьма командной строки, вставьте это в адресную строку Проводника.
 
Fenrizz
Можно без type, ибо jq умеет принимать файл на входе. А вывод просили в [один] файл,
поэтому достаточно for %f in (*.json) do jq -r ".[].ua" "%f" >> ua.txt (удвоить % в батнике).
Альтернативой jq является xidel -s -e "$json().ua", но недостаток обращений через цикл
в низкой скорости — уместнее искать пакетный режим напрямую. Увы, вызов jq *.json
выдаёт ошибку в Windows. Фикс есть, но версия с ним ожидается уже несколько лет.

 
BorlandIMHO
Ваш изначальный код создаёт пустой ua.txt — стоило проверить перед публикацией!
Заработает с путём .\Browsers\*, но это не спасёт Out-File, выдающий огромный UTF-16 LE.
Использовать ASCII в данном случае нельзя, т.к. в одном json находится агент с умляутом.
Ключ -Encoding UTF8 после Get-Content и Out-File даст UTF-8 BOM, а без BOM посложнее.

Всего записей: 1000 | Зарегистр. 01-03-2003 | Отправлено: 02:15 01-06-2021 | Исправлено: kraeved, 05:11 01-06-2021
Fenrizz



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

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

В целом согласен, но тут зависит от дополнительных требований к переносимости и совместимости, например, вариант с jq будет работать под Линуксом (с небольшими изменениями), а с PowerShell - нет.

Всего записей: 690 | Зарегистр. 12-09-2017 | Отправлено: 07:29 01-06-2021
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В смежной теме уже задавал вопрос по данному скрипту, теперь решил здесь. Плюс вопрос немного другой.
Написал скрипт, который используя утилиту imagemagick convert, конвертирует файлы tif в png8.
Скрипт имеет следующий вид:

Код:
::Turn of displaying the code on the screen
cls
@echo off
set "convert=c:\Temp\Imagemagick\convert.exe"
set "in_dir=c:\Temp\ImageMagick\in_png"
set "out_dir=c:\Temp\ImageMagick\out_png"
set "log=c:\Temp\Imagemagick\log.txt"
set "errlog=c:\Temp\Imagemagick\error_log.txt"
:: Удаляем логи
if exist %log% del %log% /q
if exist %errlog% del %errlog% /q
:: Перебираем файлы tif во входящем каталоге
for %%f in ("%in_dir%\*.tif") do call :CNT "%%f"
exit /b
 
:CNT
@echo "Started conversion file %~n1"
:: Получаем дату создания файла
set good_process=""
set dt=%~t1
set dt=%dt:~0,10%
:: Если в выходном каталоге нет файла с таким же именем, то обрабатываем
if exist "%out_dir%\%~n1.png" goto :eof
:: Конвертируем файл во временный каталог
   start /wait "" "%convert%" "%~1" -alpha off PNG8:"%temp%\%~n1.png" >> %log% && set /a good_process="1" || set /a good_process="0"
:: Если без ошибок то  
if %good_process% EQU 1 (
:: Перемещаем файл из временного каталога в выходной и задаем время создания равное исходному файлу
        move "%temp%\%~n1.png" "%out_dir%"
:: Задаем всех значений даты на время создания исходного файла
        setdate.exe -d "%out_dir%\%~n1.png" %dt%
    ) else (
:: Если есть ошибки то пишем в лог имя файла вызвавшего ошибку
@echo "%DATE% %TIME:~0,8% %~n1 error converted" >> %errlog%
)
goto :eof

Иногда при конвертации возникают ошибки, для этого добавил запись работы в логи.
Но к сожалению на выходе получаю пустые файлы.  
В чем я "накосячил"?
 
P.s. Изначально call не использовался, но столкнулся с тем что не могу получить значения переменных, поэтому пришлось перейти к такой структуре скрипта.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 10:23 01-06-2021 | Исправлено: Falcon99, 10:25 01-06-2021
kraeved



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99
Приложите хороший и плохой tiff, чтобы работать с конкретикой, а не гадать на кофейной гуще.

Всего записей: 1000 | Зарегистр. 01-03-2003 | Отправлено: 10:46 01-06-2021
Falcon99



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

Цитата:
Приложите хороший и плохой tiff, чтобы работать с конкретикой, а не гадать на кофейной гуще.

Мне немного не то надо, не могу понять почему не происходит запись информации в лог файлы.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 11:23 01-06-2021
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99
Выбросьте из скрипта все, что не относится к логированию. А что относится, замените на echo с выводом в лог. Разбираться в дебрях кода со сторонней утилитой желания нет.

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

Всего записей: 4132 | Зарегистр. 18-04-2005 | Отправлено: 11:33 01-06-2021
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Меня интересует почему не пишет в лог строчка:

Код:
start /wait "" "%convert%" "%~1" -alpha off PNG8:"%temp%\%~n1.png" >> %log% && set /a good_process="1" || set /a good_process="0"  

Как заменить ее через echo, я не понимаю.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 11:38 01-06-2021 | Исправлено: Falcon99, 11:43 01-06-2021
GCRaistlin



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

Код:
start /wait "" "%convert%" чего-то там

уходил в лог. Вот и замените эту команду на echo и посмотрите, попадет ли что-нибудь в лог. Кстати, от "start /wait" никакого проку нет.

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

Всего записей: 4132 | Зарегистр. 18-04-2005 | Отправлено: 11:45 01-06-2021
lexapass



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Falcon99
Если просто запустить convert.exe c одним файлом .tif с указанными параметрами чисто для проверки, то при успешной конверсии никакого вывода нет, поэтому и в логе пусто. Судя по описанию выводятся только предупреждения и ошибки (можно отключить с -quiet) ...

Всего записей: 570 | Зарегистр. 11-10-2004 | Отправлено: 11:53 01-06-2021
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Т.е. вы предлагаете привести ее к строчке?  

Код:
 echo "%convert%" "%~1" -alpha off PNG8:"%temp%\%~n1.png" >> %log% && set /a good_process="1" || set /a good_process="0"  

 

Цитата:
 Кстати, от "start /wait" никакого проку нет.

Сделал так чтобы гарантированно не получался параллельный запуск утилиты convert, т.к. файлы не маленькие и процесс конвертации занимает по паре минут.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 11:55 01-06-2021
Smitis



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

Цитата:
Меня интересует почему не пишет в лог строчка:
start /wait "" "%convert%" "%~1" -alpha off PNG8:"%temp%\%~n1.png" >> %log% && set /a good_process="1" || set /a good_process="0"  

Перенаправление вывода >> работает только для командного процессора. То есть, надо либо start /wait "" %comspec% /c "%convert%" (и далее), но тогда переменная good_process потеряется, либо вообще убрать start
 
Добавлено:

Цитата:
Сделал так чтобы гарантированно не получался параллельный запуск утилиты convert

Она консольная, параллельного запуска не будет.

----------
Разум когда-нибудь победит

Всего записей: 3456 | Зарегистр. 09-02-2003 | Отправлено: 12:00 01-06-2021 | Исправлено: Smitis, 12:08 01-06-2021
Falcon99



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

Код:
"%convert%" "%~1" -alpha off PNG8:"%temp%\%~n1.png" >> %log% && set /a good_process="1" || set /a good_process="0"

Лог все равно чистый.
 
Добавлено:
Буду писать лог через запуск батника с параметром лога, на подобии:

Код:
1.bat >> log.txt  

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 12:14 01-06-2021
Fenrizz



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

Цитата:
Иногда при конвертации возникают ошибки, для этого добавил запись работы в логи.
Но к сожалению на выходе получаю пустые файлы.  
В чем я "накосячил"?  

 
А на экран он сообщения об ошибках выводит? Надо тогда stderr тоже в файл перенаправлять
command ... 2>>%log%
или command ... 1>>%log% 2>&1

Всего записей: 690 | Зарегистр. 12-09-2017 | Отправлено: 13:22 01-06-2021 | Исправлено: Fenrizz, 06:38 02-06-2021
Falcon99



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
Вы правы.
Нашел в документации:

Цитата:
As a consequence of this feature, textual output is usually written to stderr instead of stdout. For example: if you want to redirect the textual output of Compare to a text file, you would have to write

Код:
compare -metric PSNR 1.png 2.png dif_1_2.png 2>result.txt

So you have to redirect stderr ("2>") to the text file, not stdout ("1>" or just ">").  

Получается именно так и надо делать.
 
Добавлено:
Но если я корректирую строку к виду:

Код:
"%convert%" "%~1" -alpha off PNG8:"%temp%\%~n1.png" 2>>%errlog% && set /a good_process="1" || set /a good_process="0"

То он отрабатывает один файл и закрывается, т.е не идет на цикл. Почему вообще не понятно.  
Поэтому наверное все-таки не буду мучаться, а просто смотреть какие файлы не были после скрипта отработаны и их обрабатывать отдельно.

Всего записей: 607 | Зарегистр. 12-10-2005 | Отправлено: 13:37 01-06-2021
   

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

Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии - bat, cmd
Maz (20-06-2024 22:42): Командная строка, батники, сценарии - bat, cmd (7 часть)


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru