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

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



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
А если в ссылке используется круглая закрывающая скобка, будет работать?

Всего записей: 657 | Зарегистр. 24-12-2015 | Отправлено: 18:56 05-02-2020
NIKZZZZ



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

Цитата:
А если в ссылке используется круглая закрывающая скобка, будет работать?

По идее, скрипт url работать должен, а вот скрипт lnk не гарантировано.

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 19:11 05-02-2020
Andrea



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
Проверил, второй вариант работает также со скобками (первый вариант не работал с ними), испытал на url-ярлыке, в котором была ссылка, заканчивающаяся на [hh825494(v=win.10)?redirectedfrom=MSDN]

Всего записей: 657 | Зарегистр. 24-12-2015 | Отправлено: 19:17 05-02-2020
NIKZZZZ



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrea
Проблема может возникнуть, если в имени lnk файла встречаются  символы ()!%^ .

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 19:26 05-02-2020
Andrea



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
Насчёт имён я понял сразу - при создании интернет-ярлыков в браузерах им далеко не всегда автоматически присваиваются корректные имена: то тире вместо дефиса, то кавычки, то восклицательные знаки.. Сейчас попробовал вариант 1, исправленный вами - после каждой строки с ссылкой в тексте пишет "Режим вывода команд на экран (ECHO) отключен". До исправления этого не было. Второй вариант работает нормально, и даже выводит в консоли на экран строку в случае невозможности открыть такой-то такой файл (наверное потому, что использованы недопустимые знаки в имени url-ярлыка). Но это настолько быстро происходит, что не удаётся разглядеть, какой именно файл не получается открыть. Нельзя ли сделать так, чтобы скрипт в случае невозможности открыть тот или иной файл временно приостанавливал действие до нажатия клавиши "Enter", чтобы была возможность рассмотреть, какие файлы не удаётся открыть, или же заносил бы в генерируемый вместе с ссылками список имена этих файлов?

Всего записей: 657 | Зарегистр. 24-12-2015 | Отправлено: 00:44 06-02-2020 | Исправлено: Andrea, 01:08 06-02-2020
Jonmey

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Andrea
Вас строго батник с его граблями интересует?
Если нет, то ваша задача в powergrep решается элементарно (можно даже из ком строки запускать).
В режиме Collect
ищите
(?<=^URL=)([^\n\r]+)
сохраняете
\1
в файл, который укажите.
При этом вам не придется заботиться от символах в именах или урлах - пусть хоть они все будут из юникода (и символ FFh), типа
 

Всего записей: 1173 | Зарегистр. 17-01-2011 | Отправлено: 02:12 06-02-2020 | Исправлено: Jonmey, 02:58 06-02-2020
NIKZZZZ



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrea
Попробуйте этот вариант.

Код:
@echo off
cd /d "%~dp0" 2>url.txt
for /f "delims=" %%a in ('dir /b *.url') do (
  echo "%%a"
  for /f "tokens=1,* delims==" %%b in ('^<"%%a" findstr /b /i /c:"URL="') do >>url.txt echo %%c
)
pause

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 10:52 06-02-2020
Andrea



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

Цитата:
Попробуйте этот вариант

Теперь всё работает. И последний вопрос: в какой кодировке в txt-редакторе лучше сохранять эти батники, чтобы всё работало максимально корректно. Я сохранял в ANSI-кириллица. И должен ли bat-файл заканчиваться пустой строкой (перевод каретки) или это не имеет значения?
 
Добавлено:

Цитата:
А можно ли создать аналогичный батник для lnk-ярлыков,   Чисто батником не получится, только с использованием сторонних программ.    С использованием wmic  

 
Сегодня проверил батник с кодом для lnk-ярлыков. Всё работает изумительно, и именно так, как я себе представлял! Поместил этот батник в папку с сотней ярлыков, и после запуска он создал список в txt с сотней путей. Выходит, что можно этого добиться без использования сторонних программ, коих для этих целей не так уж и много то существует. В интернете готовых решений по этому вопросу практически нет, и в то же время вы нашли его
 
Добавлено:
Jonmey

Цитата:
Вас строго батник с его граблями интересует?  

Необязательно, но, как оказалось, задача решается проще и быстрее с батником. А предложенная вами программа хоть и весьма хороша, но без знания англ. языка ею управлять не так-то просто. А что касается варианта батника для извлечения путей из lnk, так программ для этого можно сказать вообще единицы..

Всего записей: 657 | Зарегистр. 24-12-2015 | Отправлено: 13:40 06-02-2020 | Исправлено: Andrea, 14:05 06-02-2020
NIKZZZZ



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

Цитата:
в какой кодировке в txt-редакторе лучше сохранять эти батники,

Для батников лучше использовать их использовать их родную кодировку - OEM, но если в тексте батника не используется кириллица без разницы.

Цитата:
И должен ли bat-файл заканчиваться пустой строкой (перевод каретки) или это не имеет значения?  

Не обязательно, но лучше ее добавить.  

Цитата:
без использования сторонних программ

Это немного не так, wmic , хотя она и присутствует в windows, нельзя считать родной для батника.
К тому-же не гарантировано, что батник будет работать под XP.
А решить данную задачу, можно, например комбинированным скриптом bat+vbs, но это уже не чистый батник.
 

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:15 06-02-2020
Jonmey

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Andrea
Цитата:
Необязательно, но, как оказалось, задача решается проще и быстрее с батником.
Какой-то детский сказ. Быстрее - потому что тут помощники добрые. То есть, ленивым сильно угодить стараются. И это беда топика, поскольку многое ходит по кругу, потому что искатели "простяцких путей" не затрудняют себя даже поиском.
Обнадеживает только то, что рано или поздно местным (почти штатным) помощникам надоест (а так случается всегда и везде - исключений еще не встречал), а их смена забудет придти.
Сказанное распространяется не на все несложные по сути задачки. а только на те, которые расписаны в интернетах многократно в разных вариациях, как данная. Именно этот факт подвигнул меня предложить более универсальную альтернативу (человека в Гугле забанили и тд), которая позволит  ему решить массу аналогичных задачек никого не напрягая. Но чудесатый ответ на предложение родил сей коммент.
Цитата:
А предложенная вами программа хоть и весьма хороша, но без знания англ. языка ею управлять не так-то просто
Вы не знаете, ни английского, ни батников, ни поиска в гугле (что для батников - наипервейшая необходимость), однако это вам нисколько не мешает их использовать. А прога с графическим интерфейсом и тремя десятками слов загоняет в ступор. Чудны дела твои, господи.
Цитата:
 что касается варианта батника для извлечения путей из .lnk, так программ для этого можно сказать вообще единицы..
Программ работающих с файлами типа .lnk достаточно и они запросто гуглятся, если пальцы способны сгибаться. Понимаю, когда речь об удаленном доступе, операции на массе компов или повторяющейся операции с определенной периодичностью - тогда батники и др. аналогичные скриптовые решения могут оказаться наиболее оптимальным вариантом. Но в данном случае очевидно, что речь идет о разовой или в крайнем случае, эпизодической операции. То есть, по факту, составители батника потратили больше времени на его создание, чем он будет использован (то есть, по сумме трудозатраы-результат задача решена самым длинным и трудоемким из возможных путей). Более того, наряду со специализированными программами. существует общедоступное решение, на основе инструмента, известного всем, кто тут тусуется. А именно Тотал Коммандер + контентный плагин Shortcut, что открывает чудовищные возможности любому малоподготовленному юзеру, вроде вас, для операций с этим типом файлов (а можно еще вспомнить плагин LinkInfo):

Колонка Path - это та самая строка, которая вам нужна и которую вам нужно извлечь - тут вы ее воочию наблюдаете сразу у любого числа файлов lnk (можете фильтровать, сортировать. искать и т.д. оставляя только нужные). Можете точно также вывести все остальные данные из LNK. Показанная информация может быть скопирована в буфер (сразу вся или часть) или сохранена в файл (ANSI, Unicode) штатными средствами ТС (из меню или по горячей клавише).
 
И главное - не нужно ничего и ни у кого клянчить.
 
P.S. Впрочем, есть сорт людей, которым всю жизнь клянчить проще, чем научиться решать свои проблемки самостоятельно, даже если речь о простейших из них (типа, как ранее кто-то клянчил батник для создания плоского оглавления для HTML файлов - задача (в смысле реализации с пом. батника) достойная внесения в анналы по своей абсурдности* (это примерно то же самое , что просить батник, который будет перебирать пароли к архиву с целью взлома - сделать можно, но здоровый умом человек такой батник не попросит).
_______________
* существует масса программ, как специализированных, так и универсальных - способных однокликово решить эту задачку. Но тому искателю "простяцких путей за чужой счет" лень гуглить, да и зачем? Ведь всегда найдется дурачок, готовый потрахаться над ее решением забесплатно и методом "через заднее место", потому что так легла моча в голове у просильца.

Всего записей: 1173 | Зарегистр. 17-01-2011 | Отправлено: 08:17 07-02-2020 | Исправлено: Jonmey, 08:18 07-02-2020
iNNOKENTIY21



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


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

В каждую скриптовую тему, облечителя просильцев, мастеров и подмастерий с трубами…
Кого то это мне напоминает


----------
Спасибо медикам!

Всего записей: 2973 | Зарегистр. 16-08-2012 | Отправлено: 10:25 07-02-2020
NIKZZZZ



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

Цитата:
Кого то это мне напоминает

Мне тоже, стиль тот-же.
 

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 11:44 07-02-2020
Andrea



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

Цитата:
Для батников лучше использовать их использовать их родную кодировку - OEM

Какую именно - OEM-866 или другую OEM?
 
Да уж, нюансов немало. Сегодня обратил внимание, что разные варианты скриптов сохраняли полезный контент в txt с разной кодировкой - Win 866 (OEM - русская) и Win 1251 (ANSI - кириллица). Конечно же желательно, чтобы текст сохранялся в ANSI или Unicode (текст в кодировке Win 866 в стандартном "Блокноте" может отображаться с "крякозябрами", по крайней мере у меня на русской Windows 7 так и есть). Увидев это, я просто перекодировал текст в AkelPad-е. Это конечно же мелочь, но тем не менее. Каким образом можно изменить скрипт для lnk-ярлыков, чтобы выводимый им текст сохранялся в ANSI? Или, может существует некое универсальное решение для bat-файлов, заставляющее выводить генерируемый ими текст в нужной кодировке?
Jonmey

Цитата:
плагин Shortcut

Упустил его из виду, но о всём остальном, что вы написали - уж лучше промолчу..

Всего записей: 657 | Зарегистр. 24-12-2015 | Отправлено: 16:32 07-02-2020 | Исправлено: Andrea, 16:50 07-02-2020
iglezz

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrea
chcp 65001 и батник дальше текст выводит в utf8
chcp 1251 - Win 1251
и т.п.
батник, само собой, в соответствующей кодировке должен быть, если вывод через echo ..... > file

Всего записей: 1395 | Зарегистр. 18-02-2003 | Отправлено: 16:52 07-02-2020 | Исправлено: iglezz, 16:54 07-02-2020
NIKZZZZ



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

Цитата:
Какую именно - OEM-866 или другую OEM?  

Для русского языка - 866

Цитата:
chcp 65001 и батник дальше текст выводит в utf8  

Не совсем правильно, wmic наплюет на кодировку.
 

Код:
@echo off
setlocal enabledelayedexpansion  
cd /d "%~dp0" 2>lnk.txt
for /f "delims=" %%a in ('dir /b /a-d *.lnk') do (
  set lnk=%%~fa
  echo !lnk!
  for /f "tokens=1,* delims==" %%b in ('wmic path win32_shortcutfile where "name='!lnk:\=\\!'" get target /value ^|find /i "Target="') do (
    rem >nul chcp 1251
    >nul chcp 65001
    >>lnk.txt echo;%%c|more
    >nul chcp 866
  )  
)  

 
Скрипт будет выводить данные в UTF8
Если заменить

Код:
    >nul chcp 1251
    rem >nul chcp 65001

Вывод будет в ANSI

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 17:19 07-02-2020 | Исправлено: NIKZZZZ, 17:26 07-02-2020
iglezz

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

Цитата:
Не совсем правильно, wmic наплюет на кодировку.  

Вместо wmic можно подставить любую другую программу, которая может плевать на кодировку, а может и не плевать...

Всего записей: 1395 | Зарегистр. 18-02-2003 | Отправлено: 17:27 07-02-2020
Andrea



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

Цитата:
батник, само собой, в соответствующей кодировке должен быть

Насчёт кодировки батника я понял так, что
Цитата:
Для батников лучше использовать их использовать их родную кодировку - OEM, но если в тексте батника не используется кириллица без разницы.  

 

Всего записей: 657 | Зарегистр. 24-12-2015 | Отправлено: 17:30 07-02-2020 | Исправлено: Andrea, 17:31 07-02-2020
NIKZZZZ



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

Цитата:
Насчёт кодировки батника я понял так

Это не совсем точно, например в батнике можно поставить первой строкой ">nul chcp 1251", она переключит кодировку на ANSI, тогда текст батника тоже должен быть на ANSI.
Но, повторюсь, если в тексте батника не используется кириллица без разницы, для английского языка обе  
кодировки совпадают.
Но лучше использовать родную OEM, меньше возможных проблем.
 
 
 

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 17:47 07-02-2020
Andrea



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
В конце каждой строки в сгенерированном тексте для lnk-ярлыков изначально имелся пробел, и в ходе экспериментов (чтобы избавиться от них) изменил "echo %%c|more" на "echo %%c" - пробелов не стало, всё вроде бы работает и во всех вариантах. Также в конце кода в начале следующей строки добавил notepad "lnk.txt" или "C:\Program Files\AkelPad\AkelPad.exe" "lnk.txt", чтобы по окончании работы скрипта сразу открывался "Блокнот" или AkelPad для просмотра/редактирования получившегося текста. Правильно всё сделал (в смысле, чтобы добиться того, чего хотел)?
 
Добавлено:
Сейчас понял, что сделал что-то не так - после того, как изменил "echo %%c|more" на "echo %%c", пробелов в конце строк хоть и не стало, но вместе с тем изменилась кодировка текста на выходе - вместо ANSI или UTF-8 снова стало OEM-866. Ну да ладно

Всего записей: 657 | Зарегистр. 24-12-2015 | Отправлено: 20:47 07-02-2020 | Исправлено: Andrea, 21:35 07-02-2020
NIKZZZZ



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andrea
Вот вариант без more и setlocal enabledelayedexpansion

Код:
@echo off
cd /d "%~dp0" 2>lnk.txt
for /f "delims=" %%a in ('dir /b /a-d *.lnk') do call :Link "%%a"
start "link" "%windir%\system32\notepad.exe" "lnk.txt"
goto :eof
 
:Link
set lnk=%~f1
echo %lnk%
for /f "tokens=1,* delims==" %%b in ('wmic path win32_shortcutfile where "name='%lnk:\=\\%'" get target /value^|findstr /b /i "target="') do set target=%%c
>nul chcp 1251
rem >nul chcp 65001
>>lnk.txt echo;%target%
>nul chcp 866
goto :eof  

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 22:52 07-02-2020
   

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