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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 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

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

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

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



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

Код:
sfc /scannow | FIND /I "Программа защиты ресурсов Windows обнаружила поврежденные файлы" && sfc /scannow  

Всего записей: 677 | Зарегистр. 12-09-2017 | Отправлено: 16:24 08-09-2022
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
Какой смысл, это надо постановщика задачи спросить. С моей точки зрения, если в результате работы стало все хорошо, логично возвращать 0.

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

Всего записей: 3950 | Зарегистр. 18-04-2005 | Отправлено: 17:18 08-09-2022
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
посоветуйте алгоритм как решить. надо найти строку с наибольшим Resolution в файле\потоке,
прблема в том, что все строки разные. и потом надо взять не эту строку а ссылку из следующей
Подробнее...

Всего записей: 3412 | Зарегистр. 29-03-2016 | Отправлено: 15:59 12-09-2022 | Исправлено: bomzz, 22:56 15-09-2022
Grishanenko

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Запускаю обычный консольный 7z.exe, файл 123.zip не существует.
7z.exe x 123.zip
Первые две строки идут в stdout:
  7-Zip 18.05 (x86) : Copyright (c) 1999-2018 Igor Pavlov : 2018-04-30
  Scanning the drive for archives:
Следующие строки - в stderr:
  ERROR: Не удается найти указанный файл.
  123.zip
   
  System ERROR:
  Не удается найти указанный файл.
 
При помощи bat файла с таким содержимым:

Код:
@echo off
set 7z_error=0
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%b in ('7z x 123.zip 2^>^&1' ) do (
if /i "!7z_error!"=="0" set 7z_result=%%b
if /i "!7z_result:~0,5!"=="ERROR" set 7z_error=1
echo %%b
)

Успешно выводится вся информация от 7z.exe и выставляется 7z_error=1 из-за ошибки. В 7z_result залипает сообщение об ошибке.
Но если заменить "7z x 123.zip" на "7z a 123.zip *.jpg" то оказывается что вся выдача в stdout происходит разом и только после завершения процесса архивации.
Что нужно сделать, чтобы команда "echo %%b" (или другая подобная) срабатывала мгновенно?

Всего записей: 719 | Зарегистр. 17-06-2006 | Отправлено: 21:34 27-09-2022
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grishanenko
Ну а что тут можно сделать? Ничего. А для чего вообще все это?

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

Всего записей: 3950 | Зарегистр. 18-04-2005 | Отправлено: 21:49 27-09-2022
Grishanenko

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Ну я ведь не знаю какие есть ухищрения при работе с for
Замена %7z_error% на !7z_error! ведь заставила нормально работать if, у которого проблема тоже только внутри for. Вдруг и для echo что-то есть.
Я вот думал что если поменять местами потоки stdout и stderr, то все информационные сообщения попадут сразу на экран, а вот ошибки будут обрабатываться. На них процесс все равно завершится. Но методом тыка (1>&3 2>&1 3>&2) поменять их не получилось.
А нужно это для youtube-dl (yt-dlp). На 7z проще тренироваться, т.к. Python жутко тормозной.
Нужно выловить ошибку, чтобы батник не закрылся, если она появится. Но и нужно видеть процесс загрузки и перекодировки, не залип ли он.

Всего записей: 719 | Зарегистр. 17-06-2006 | Отправлено: 23:39 27-09-2022
GCRaistlin



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

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

Всего записей: 3950 | Зарегистр. 18-04-2005 | Отправлено: 23:50 27-09-2022
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grishanenko
"выловить ашыпку" 7z проще так:

Код:
7z x 123.zip||call :PROCESS_7Z_ERROR "%ERRORLEVEL%" "123.zip"
REM тут код, если ашыпка не выявлена (либо устранена обработчиком ашыпки)
...........
 
goto :EOF
 
:PROCESS_7Z_ERROR
REM Тут код обработки ашыпки
echo 7-zip raised errorlevel %~1 while processing file "%~2"
......
goto :EOF

 
Если вас интересует только содержимое потока stderr {для целей парсинга "врукопашную"}- достаточно перенаправить в nul поток stdout:
Код:
1>nul 7z x 123.zip

 
Добавлено:

Цитата:
поменять местами потоки stdout и stderr,

Фантастика. Оба потока {по умолчанию} идут на одно устройство con в том порядке, в каком их задействует программа. Разделить их можно только через перенаправление одного из потоков в nul (т.е. "в никуда") либо в файл. Из файла можно {по окончании программы} прочитать и обработать как надо {например просто вывести на экран}.

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

Всего записей: 2352 | Зарегистр. 12-10-2006 | Отправлено: 23:59 27-09-2022 | Исправлено: BorlandIMHO, 00:31 28-09-2022
GCRaistlin



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

Цитата:
поменять местами потоки stdout и stderr

Кстати, это можно:

Код:
 
7>&1 8>&2 >&8 2>&7
 


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

Всего записей: 3950 | Зарегистр. 18-04-2005 | Отправлено: 00:46 28-09-2022
BorlandIMHO

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

Цитата:
Кстати, это можно:

Что от этого изменится в выводе на экран?

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

Всего записей: 2352 | Зарегистр. 12-10-2006 | Отправлено: 01:00 28-09-2022
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
Да при чем тут экран. Просто интересно было, можно ли.

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

Всего записей: 3950 | Зарегистр. 18-04-2005 | Отправлено: 01:05 28-09-2022
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Такое действие имеет хоть какой-то смысл, если потоки выводятся на разные устройства {например, в *NIX, на tty1 и tty2; сама программа при этом может быть запущена в tty7}. В винде - вполне бессмысленный концепт, ибо консоль одна, причём привязанная к текущему экземпляру conhost, куда всё и валится. Строго в порядке выдачи программы.

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

Всего записей: 2352 | Зарегистр. 12-10-2006 | Отправлено: 01:29 28-09-2022
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
В сете FOR может быть нужда парсить stderr. И сохранять при этом stdout.

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

Всего записей: 3950 | Зарегистр. 18-04-2005 | Отправлено: 01:37 28-09-2022
BorlandIMHO

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

Цитата:
В сете FOR может быть нужда парсить stderr. И сохранять при этом stdout.

Что решаемо только через перенаправление stdout в файл, с последующим чтением {если надо} из этого файла.
В рамках con потоки stdout и stderr неразделимы...

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

Всего записей: 2352 | Зарегистр. 12-10-2006 | Отправлено: 01:45 28-09-2022
GCRaistlin



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

Код:
 
cmd /c "for /f %A in ('7^>^&1 8^>^&2 ^>^&8 2^>^&7 handle foobar') do @echo Stderr: %A" 2>stdout.txt
 


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

Всего записей: 3950 | Зарегистр. 18-04-2005 | Отправлено: 01:57 28-09-2022
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В плане 7-Zip лучше конечно использовать ключ -bs, а не вот эти все колдунства...

Всего записей: 12315 | Зарегистр. 11-03-2002 | Отправлено: 05:11 28-09-2022
Grishanenko

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

Цитата:
Кстати, это можно:
Код:
7>&1 8>&2 >&8 2>&7  

 
Спасибо! Это именно то, что и нужно было. Теперь все работает как следует.
 
GCRaistlin
Я, вроде, объяснил. Но попробую еще раз. Для галочки.
В цикле for вся информация из stderr мгновенно выдается на экран командой echo %%b.
В цикле for вся информация из stdout "накапливается" и echo %%b я увижу только тогда, когда программа завершит свою работу (а это может быть и 10-20 минут).
После замены, я мгновенно вижу процесс загрузки, что скорость не упала до очень низкой. Если же произойдет ошибка, то далее будет переход по метке и выдача цветной стоки с текстом ошибки через

Код:
echox -c 0C "%7z_result%"

 
%ERRORLEVEL% лишь сообщит о факте ошибки, но не напишет ее текст.

Всего записей: 719 | Зарегистр. 17-06-2006 | Отправлено: 09:03 28-09-2022 | Исправлено: Grishanenko, 09:05 28-09-2022
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grishanenko
Я просил объяснить не алгоритм, а задачу. Это:

Цитата:
После замены, я мгновенно вижу процесс загрузки, что скорость не упала до очень низкой.

для меня по-прежнему непонятно.
Впрочем, если вам помогло, то и ладно.

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

Всего записей: 3950 | Зарегистр. 18-04-2005 | Отправлено: 10:01 28-09-2022
kot1313



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые Профи, может кто знает,  
как с помощью скрипта в конкретной папке Проводника Windows включить Табличный просмотр в основном окне ?  
 
С помощью ПКМ это делается конечно просто - Вид-Таблица, можно исчо и скролом с Ctrl,  
но очень хотелось бы иметь возможность сделать это действие с помощью командной строки ...
 
Буде благодарен за подсказки

Всего записей: 2522 | Зарегистр. 11-12-2002 | Отправлено: 22:40 06-10-2022 | Исправлено: kot1313, 22:41 06-10-2022
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kot1313
Готового рецепта не дам, где копать - подскажу.
Данные об имени папки {с порядком сортировки, отличным от умолчального} винда хранит в реестре, в разделе
Код:
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU

в ключах с цифровыми именами {"0", "1" и т.д.} типа REG_BINARY.
 
Собственно настройки для соответствующей папки хранятся в разделе  
Код:
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags

в подразделах с соответствующими "именами папки"
 
Дальше - только powershell {в "голом" cmd проблема нерешаема}.
Про чтение ключа реестра тут: https://adamtheautomator.com/powershell-to-get-a-registry-value/
Рецепт по переводу REG_BINARY в человекочитаемый текст есть тут: https://social.technet.microsoft.com/Forums/scriptcenter/en-US/5c4755ee-6fac-40f4-9210-95d50cdbb501/registry-regbinary-to-string
Рецепт по обратному переводу тут: https://stackoverflow.com/questions/18092544/how-to-encode-a-string-to-reg-binary-with-powershell
 
"Краткий алгоритм": читаем все BagMRU, если искомой папки там нет - создаём для неё новый BagMRU и соответствующий Bag.
 
За реализацию я лично - не возьмусь. Спецов правильнее попросить о помощи тут:  http://forum.ru-board.com/topic.cgi?forum=62&topic=30859
 
Добавлено:
P.S. Проще руками выставить...

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

Всего записей: 2352 | Зарегистр. 12-10-2006 | Отправлено: 00:56 07-10-2022
Открыть новую тему     Написать ответ в эту тему

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

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru