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

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



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

Цитата:
Pasha_ZZZ, так в буфер пишется всё, а не только stdout  

Вы @ перед командой не забыли поставить?  

Код:
(for /L %t in (0,1,1) do @echo %t)|clip  

Всего записей: 690 | Зарегистр. 12-09-2017 | Отправлено: 07:50 17-08-2021 | Исправлено: Fenrizz, 08:06 17-08-2021
Baltazar500



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

Код:
echo OFF
где-нибудь в начале скрипта
наверное
Код:
@echo OFF
? Этот вариант в связке с for я кстати пробовал ещё до написания прошлого поста  и результат был тем же самым о котором я написал выше.

Цитата:
И да, в варианте от Pasha_ZZZ, скопипащенном непосредственно из поста, ничего лишнего в буфер не попадает именно засчёт @ перед echo.  
А вот собаку перед echo в примере Pasha_ZZZ я проглядел, каюсь :/ Этот пример действительно работает как надо.
 
Fenrizz, забыл
 
ОК. Теперь задача чуть усложняется. Как это добро одновременно отправить в буфер обмена, stdout консоли и в файл ?

Всего записей: 2311 | Зарегистр. 19-09-2011 | Отправлено: 09:19 17-08-2021 | Исправлено: Baltazar500, 09:21 17-08-2021
Fenrizz



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

Цитата:
ОК. Теперь задача чуть усложняется. Как это добро одновременно отправить в буфер обмена, stdout консоли и в файл ?

Одновременно никак, наверное, только с помощью объединения нескольких команд.

Код:
(for /L %t in (0,1,1) do @echo %t)>file.txt & type file.txt & type file.txt|clip  

Всего записей: 690 | Зарегистр. 12-09-2017 | Отправлено: 09:50 17-08-2021 | Исправлено: Fenrizz, 09:52 17-08-2021
BorlandIMHO

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

Цитата:
Как это добро одновременно отправить в буфер обмена, stdout консоли и в файл ?

В 2 назначения можно посредством утилиты tee (виндовый порт есть в CoreUtils), она выводит текст в stdout и его копию в файл, остаётся возможность перенаправления stdout в clip.
В 3 одновременно - штатные способы, насколь я знаю, отсутствуют. Пишите новую утиль либо пользуйтесь костылями (сначала вывод в файл, а потом уже из него в буфер и на экран), как предложил Fenrizz.
 


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

Всего записей: 2655 | Зарегистр. 12-10-2006 | Отправлено: 11:30 17-08-2021
KOLT2020



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

Всего записей: 126 | Зарегистр. 06-01-2020 | Отправлено: 20:08 17-08-2021 | Исправлено: KOLT2020, 17:26 18-08-2021
Artem_Butenko



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

Цитата:
cmd для удаления защищенной-скрытой ветки реестра Win 10 Tweaker

 
Я не сторонник "умных твикеров" операционной системы, проверить данную утилиту не могу, но если ветка реестра создаётся с правами TrustedInstaller, то без привлечения сторонних утилит подобное (стандартное) действие невозможно, без "ручного" редактирования прав на ветку реестра.

Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 02:35 18-08-2021 | Исправлено: Artem_Butenko, 02:36 18-08-2021
Pasha_ZZZ



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

Цитата:
1. Открыть редактор реестра в необходимой ветке.


Цитата:
REG ADD HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit /v LastKey /t REG_SZ /d <ключ_для_открытия> /f
regedit
Формат параметра можно заранее подсмотреть.

Цитата:
2. Открыть редактор реестра в необходимом ключе.

Что это и как - никому неизвестно.

Всего записей: 12815 | Зарегистр. 11-03-2002 | Отправлено: 03:54 18-08-2021 | Исправлено: Pasha_ZZZ, 03:54 18-08-2021
Artem_Butenko



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

Цитата:
REG ADD HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit /v LastKey /t REG_SZ /d <ключ_для_открытия> /f
regedit  

 
Видел подобный пример на другом форуме. Вопрос? Каким образом открыть редактор в необходимой ветке, в Вашем случае: "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit"?

Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 06:07 18-08-2021
KOLT2020



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

Всего записей: 126 | Зарегистр. 06-01-2020 | Отправлено: 07:07 18-08-2021 | Исправлено: KOLT2020, 17:25 18-08-2021
KiloSub



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

Код:
 
@echo off
 
set "Target=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules"
 
tasklist | find "regedit.exe" && taskkill /f /im regedit.exe
reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Applets\Regedit" /v "LastKey" /t REG_SZ /d "%Target%" /f
 
start regedit  
 

Всего записей: 420 | Зарегистр. 30-05-2020 | Отправлено: 07:15 18-08-2021
alex52mail

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как направить в файл - но чтобы созданный файл cmd.txt был стразу UT8
cmd /? > cmd.txt
 
Удачи.

----------
Везде трудно первые 15 лет, потом легче.
Все проблемы имеют ПРОСТОЕ решение
Ты начальник я дурак я начальник ты дурак. Но хуже дурака дурак с инициативой.

Всего записей: 1815 | Зарегистр. 04-09-2015 | Отправлено: 13:36 19-08-2021
Pasha_ZZZ



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

Цитата:
chcp 65001 & cmd /? > cmd.txt

Всего записей: 12815 | Зарегистр. 11-03-2002 | Отправлено: 14:13 19-08-2021
alex52mail

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ  Спасибо.
В русской системе - и  65001 и 437 - все создают 1251, а просто cmd /? > cmd.txt  создает 866
 
Перегружусь, попробую в инглиш системе где не UTF-8 фиалы превращают русский в кроказябры.
 
Удачи.

----------
Везде трудно первые 15 лет, потом легче.
Все проблемы имеют ПРОСТОЕ решение
Ты начальник я дурак я начальник ты дурак. Но хуже дурака дурак с инициативой.

Всего записей: 1815 | Зарегистр. 04-09-2015 | Отправлено: 19:19 19-08-2021
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alex52mail
Если устроит UTF16LE(1200) - то cmd /u /? >cmd.txt
Или можно ещё извратиться и позвать powershell для конвертации вывода cmd...

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

Всего записей: 2655 | Зарегистр. 12-10-2006 | Отправлено: 19:47 19-08-2021
alex52mail

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
C:\Users\w11Ent132FullUUP>chcp 65001 && cmd /?> d:\cmd65.txt
Active code page: 65001

В en-US системе создает файл только 1252 - т.е. как и ранее создает не указанное а системное.
 
BorlandIMHO
cmd /u /? >cmd.txt  -  создает UTF16LE(1200) - но cmd был указан просто как пример переправления.
А надо из одного скрипта передавать в файлы русский и в ru-RU и в en-US системах.  А в не UTF-8 файлах - русский превращается в крозябры.  
Вот и морокую как этого избежать.
 
Удачи.

----------
Везде трудно первые 15 лет, потом легче.
Все проблемы имеют ПРОСТОЕ решение
Ты начальник я дурак я начальник ты дурак. Но хуже дурака дурак с инициативой.

Всего записей: 1815 | Зарегистр. 04-09-2015 | Отправлено: 22:03 19-08-2021 | Исправлено: alex52mail, 22:06 19-08-2021
BorlandIMHO

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

Цитата:
не UTF-8 файлах - русский превращается в крозябры.

Вы не правы. Кодировка UTF16LE существенно отличается от UTF8, но, тем не менее, вполне себе читабельна даже в штатном "Блокноте". Если вы видите "крозябры" - значит чем-то не тем смотрите...
 
Более того, файлы в 1251/866 тоже вполне себе могут читаться в винде {2000 и свежее} с любой локализацией. Вопрос в том, чем...
Консоль, к примеру, вполне себе юникодна. И вполне способна к отображению русского (1251/866 и даже 20866{"в девичестве" KOI8 Rus}) текста, даже без установки поддержки русского языка (достаточно правильного chcp)...
 
65001 нужен, по большому счёту, только если необходимо работать с текстом, содержащим одновременно несколько языков (например: украинский, немецкий и японский) либо с символами, отсутствующими в ANSI/OEM кодировке (например, &#1421; или &#1758;).
 
 
P.S.
Оказывается, руборд, в отличие от виндовой консоли, не умеет отображать юникод...
Собственно, картинка с символами 1421 и 1758 из charmap, чтоб было понятно о чём вообще речь:


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

Всего записей: 2655 | Зарегистр. 12-10-2006 | Отправлено: 23:23 19-08-2021 | Исправлено: BorlandIMHO, 23:50 19-08-2021
alex52mail

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня в en-US системах w8 w10 и w11 - файлы с русским читаются (блокнот, AkelPad, Lister) при открытии - но при сохранении - текст превращается в ??????   Но при сохранении файла в UTF-8  - русский остается читаемым.
 
1251 файл count.cmd  с русским - в консоли en-US w11 представляется так и по другому в консоли Ru w10 - хотя нормально читается в блокнот, AkelPad, Lister
 
Вот и озадачился как со скрипта перенаправлять русский чтобы он читался.
 
Удачи.

----------
Везде трудно первые 15 лет, потом легче.
Все проблемы имеют ПРОСТОЕ решение
Ты начальник я дурак я начальник ты дурак. Но хуже дурака дурак с инициативой.

Всего записей: 1815 | Зарегистр. 04-09-2015 | Отправлено: 00:10 20-08-2021 | Исправлено: alex52mail, 00:53 20-08-2021
BorlandIMHO

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

Цитата:
 в консоли Ru w10

Показывает ересь, но хотя бы видна основа (ANSI1251), хотя и сильно покорёженная.
Если перед "type d:\count\count.cmd" ввести "chcp 1251" - увидите русский текст (в той степени, что он не покорёжен)...
Если дадите сам файлик - можно будет сказать точнее, что там и как.
 
Про перенаправление вывода: кодировка итогового файла зависит от того, в какой кодировке выдаёт текст программа-источник.
Касательно конкретно cmd.exe - определяется локализацией системы и текущей кодовой страницей консоли/ключом запуска "/u": при /u русская винда выдаёт русский в cp1200, при 866/1251 русский в соответствующей кодовой странице, при 65001 - английский в  cp65001, при всех остальных CP - английский в cp437. Английсая винда - выдаёт всегда английский, в соответствующей юникодной кодировке либо в 437.
Что и в какой кодировке выдаёт сферическая программа в вакууме и обращает ли она при этом внимание на текущую кодовую страницу консоли - мне неизвестно.
 

Цитата:
при сохранении - текст превращается в ??????

Если используемые средства редактирования портят текст - значит это либо хуёвые средства редактирования, либо кривые руки редактирующего...
Я лично обычно использую встроенный редактор FAR Manager - там проблем не видел, сохранение идёт в той же кодировке, в которой файл прочитан. Независимо от локализации системы...


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

Всего записей: 2655 | Зарегистр. 12-10-2006 | Отправлено: 02:10 20-08-2021
BorlandIMHO

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
alex52mail
Чтоб понятнее было с кодировками:
demo.cmd
Код:
@echo off
chcp 1251
echo Это текст в кодировке ANSI1251
pause
chcp 866
echo ќв® ⥪бв ў Є®¤Ёа®ўЄҐ OEM866
pause
chcp 65001
echo Р-то текст РІ РєРѕРґРёСЂРѕРІРєРµ UTF8
pause
chcp 20866
echo ьФП ФЕЛУФ Ч ЛПДЙТПЧЛЕ KOI8R
pause
chcp 855
echo шеЦ еЁЖге л ЖЦ¦·бЦлЖЁ "OEM - Ж·б·РР·¤  еб ¦·¤·ЦФФ Ю"
pause
chcp 10007
echo ќто текст в кодировке "MAC - кириллица"
pause
chcp 28595
echo НвЮ вХЪбв Т ЪЮФШаЮТЪХ "ISO 8859-5 ЪШаШЫЫШжР"
pause
chcp 437
type %0
pause

Файлик сохранять "Блокнотом" в русской винде (т.е. кодировка самого файла demo.cmd д.б. ANSI1251).
Ну, или, воспользуйтесь, как и я, редактором FAR manager.
 
Показывает русский текст в консоли винды (свежее 2000) любой локализации (важно: для XP/2003 предварительно требуется донастроить консоль на использование юникодного шрифта отображения Consolas; для 2000 придётся ещё и ставить Consolas в систему и ковырять реестр), а после переключает консоль в cp437 (умолчальная кодовая страница для консоли англ. винды) и выводит сам себя "крозябрами".

Если перенаправить вывод команды echo в текстовый файл - получите текстовый файл в соответствующей кодировке.

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

Всего записей: 2655 | Зарегистр. 12-10-2006 | Отправлено: 14:43 21-08-2021 | Исправлено: BorlandIMHO, 16:15 21-08-2021
Artem_Butenko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, пожалуйста помогите решить некоторые вопросы.
1. Проверка наличия прав администратора в пакетном файле. Не знаю насколько корректно, но, работает следующий сценарий. Только вот, если пакетный сценарий запущен под учётной записью с правами администратора, но не с повышением прав (ПКМ на пакетном сценарии -> Запуск от имени администратора), то получаем сообщение об отсутствии требуемых прав.
2. Вывести список всех смонтированных в операционной системе дисков. В принципе устраивает простой вариант или немного сложнее. Только оба примера не предоставляют информацию о размере дисков, как это делает "diskpart".
3. Посчитать объём дискового пространства занимаемого указанным каталогом. Нашёл следующий пример. Только он выводит информацию в байтах и работает очень долго. Хотелось бы выводить информацию о занятом дисковом пространстве отдельно в Мб и Гб (двумя строками).
4. Возможность ввода для переменной Set буквы только смонтированных логических дисков (кроме системного) в латинице (при вводе других символов и цифр, а также более одной буквы) "перезапускать" запрос Set. Мой самый простой недаработанный вариант.
5. Перед выполнением команды xCopy, проверить достаточно ли места на диске, букву которого мы указали в пункте №4, чтобы полностью скопировать каталог из пункта №3. Если конечно подобное вообще возможно реализовать в пакетном сценарии.
6. Вывести с возможностью выбора (1, 2, 3, 4, 5 ...) содержимого ветки реестра "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList". Хотя логичнее будет выполнить поиск в этой ветке по переменной %UserProfile%, а при нахождении выполнить изменение значения строкового параметра "ProfileImagePath" на Буква_диска_из_пункта_№_4:\Users\текущий_пользователь.
Буду Всем Вам благодарен за ценные советы.

Всего записей: 725 | Зарегистр. 19-02-2008 | Отправлено: 23:38 28-08-2021 | Исправлено: Artem_Butenko, 05:41 30-08-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