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

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

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

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

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

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

Код:
if "%1*"=="*" exit
if NOT EXIST "%1*" exit
copy /y nul "%~dpn1.sfv" ||exit
1>"%~dpn1.sfv" echo ;CRC checksums for contents of "%~f1" archive
1>>"%~dpn1.sfv" echo.
setlocal ENABLEDELAYEDEXPANSION
 
for /f "usebackq tokens=1,2 delims== " %%A in (`cd.^&"c:\Program Files\7-Zip\7z.exe" l -ba -slt "%~f1"`) do (
 
    if /I %%~A*==Path* set "FNAME=*%%~B"
    if /I %%~A*==CRC* if NOT %%~B*==* 1>>"%~dpn1.sfv" call echo %%~B    !FNAME!
)
 


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

Всего записей: 1607 | Зарегистр. 12-10-2006 | Отправлено: 14:47 17-07-2022 | Исправлено: BorlandIMHO, 15:43 17-07-2022
GCRaistlin



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

Цитата:
 
setlocal ENABLEDELAYEDEXPANSION
if "%1*"=="*" exit
 

А если %1 равно, скажем

Код:
 
!!
 

?

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

Всего записей: 3483 | Зарегистр. 18-04-2005 | Отправлено: 15:01 17-07-2022
BorlandIMHO

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

Цитата:
А если %1 равно, скажем !!

Ну, практически любую идею можно довести до абсурда.
Переместил setlocal пониже....
 
Тем не менее, ничто не помешает пользователю скормить скрипту вместо архива какую-нибудь чушь. И, по идее, такую "подлянку" тоже нужно бы скриптом отлавливать и обрабатывать. И ещё много всякого придумать можно, только код раздуется до совершенно неприличных размеров. И сил/времени на написание/отладку такого монстра, честно говоря, жаль.


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

Всего записей: 1607 | Зарегистр. 12-10-2006 | Отправлено: 15:38 17-07-2022
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
Достаточно выключать delayed expansion перед %-раскрытием переменной, если ее значение потенциально может содержать !. FNAME, я так понимаю, может, поэтому в данном случае надо перенести SETLOCAL внутрь блока FOR - и добавить в его конец ENDLOCAL.

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

Всего записей: 3483 | Зарегистр. 18-04-2005 | Отправлено: 16:01 17-07-2022
BorlandIMHO

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

Цитата:
перенести SETLOCAL внутрь блока FOR - и добавить в его конец ENDLOCAL.

Возможно. Я, честно говоря, вообще не рассматривал возможного использования "!" в имени файла...
И если имя файла в архиве - "!.!", то в любом случае при раскрытии !FNAME! получим пустое место...

Код:
for /f "usebackq tokens=1,2 delims== " %%A in (`cd.^&"c:\Program Files\7-Zip\7z.exe" l -ba -slt "%~f1"`) do (
 
    if /I %%~A*==Path* set "FNAME=*%%~B"
    setlocal ENABLEDELAYEDEXPANSION
    if /I %%~A*==CRC* if NOT %%~B*==* 1>>"%~dpn1.sfv" echo %%~B    !FNAME!
    endlocal
)
 

Т.е. для "борьбы с восклицательными знаками в имени файла" нужно что-то другое использовать...

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

Всего записей: 1607 | Зарегистр. 12-10-2006 | Отправлено: 16:28 17-07-2022
GCRaistlin



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

Цитата:
если имя файла в архиве - "!.!", то в любом случае при раскрытии !FNAME! получим пустое место

Нет, не получим.

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

Всего записей: 3483 | Зарегистр. 18-04-2005 | Отправлено: 18:10 17-07-2022
insorg



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня как раз в папке D:\!Backup\ есть архивы, и с ними не работает.
Убирать "!" - не вариант, это не единственная такая папка, символ нужен.
Лечится?

Всего записей: 2956 | Зарегистр. 04-11-2010 | Отправлено: 18:34 18-07-2022 | Исправлено: insorg, 18:39 18-07-2022
BorlandIMHO

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

Цитата:
Лечится?

Типа да.

Код:
@echo OFF
if "%~1*"=="*" exit
if NOT EXIST "%~1" exit
copy /y nul "%~dpn1.sfv" ||exit
1>"%~dpn1.sfv" echo ;CRC checksums for contents of "%~f1" archive
1>>"%~dpn1.sfv" echo.
 
for /f "usebackq tokens=1,* delims== " %%A in (`cd.^&"c:\Program Files\7-Zip\7z.exe" l -ba -slt -sccUTF-8 -- "%~f1"`) do (
 
    if /I %%~A*==Path* set "FNAME=*%%~B"
    if /I %%~A*==CRC* if NOT %%~B*==* if NOT %%~B*==00000000* 1>>"%~dpn1.sfv" (setlocal ENABLEDELAYEDEXPANSION&&echo %%~B    !FNAME!&&endlocal)
)
 

Но вообще-то "!" в именах/путях - хреновая идея...
 
P.S. Примечания к выпуску:  
1. Предполагается, что в архиве прописаны контрольные суммы CRC32. Если в ваших архивах почему-то используется Blake2sp, а то и CRC64 - в выходных файлах скрипта будет только комментарий. При желании, скрипт можно адаптировать и к такой экзотике, но у меня лично такого желания нет. "As is", как говорится.
2. Для зашифрованного архива с нешифрованным заголовком результат будет неверным, во всяком случае - для Rar-архивов. Претензии адресуйте автору/-ам.
2а. На зашифрованном архиве с зашифрованным заголовком скрипт повиснет и будет ждать ввода пароля. Что вполне логично, ибо без пароля из такого архива не удастся извлечь никакой информации.
3. "!" в именах файлов победить удалось. Если кто ещё придумает, как бороться с "&" - будет вообще здорово. Пожалуйста, если решение на VBS/JS/PS - приведите законченный скрипт, не ограничиваясь "коньцепцыей".

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

Всего записей: 1607 | Зарегистр. 12-10-2006 | Отправлено: 20:20 18-07-2022 | Исправлено: BorlandIMHO, 20:31 19-07-2022
Pasha_ZZZ



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

Цитата:
Но вообще-то "!" в именах/путях - хреновая идея...

А я думал хреновая идея использовать CMD для решения всего на свете, пытаясь навтыкать всяких костылей ради того, чтобы работало всегда.
Есть же куча вариантов, например VBS/JS. И там никаких ограничений по работе с разными символами.

Всего записей: 10881 | Зарегистр. 11-03-2002 | Отправлено: 20:56 18-07-2022
BorlandIMHO

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
Что Вам мешает предложить своё решение на VBS/JS/PS?..
Решение на AWK уже было...

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

Всего записей: 1607 | Зарегистр. 12-10-2006 | Отправлено: 21:14 18-07-2022
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
Вообще, делать так, чтобы работало всегда, - это хороший тон. Тем более что в данном случае для этого не требуется ничего экстраординарного.

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

Всего записей: 3483 | Зарегистр. 18-04-2005 | Отправлено: 22:14 18-07-2022 | Исправлено: GCRaistlin, 22:37 18-07-2022
insorg



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

Всего записей: 2956 | Зарегистр. 04-11-2010 | Отправлено: 22:18 18-07-2022
BorlandIMHO

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

Цитата:
Теперь работает

Ещё подправил, добавил фильтрацию папок по CRC=00000000 (характЕрно для архивов Rar, у Zip и 7z просто пустой CRC).

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

Всего записей: 1607 | Зарегистр. 12-10-2006 | Отправлено: 15:37 19-07-2022
los

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

Цитата:
Ещё подправил, добавил фильтрацию папок по CRC=00000000 (характЕрно для архивов Rar, у Zip и 7z просто пустой CRC).

Еще один момент - если в rar архиве использована сумма blake2, то 7z будет выводить
Checksum = сумма, а не CRC = сумма.

Всего записей: 6052 | Зарегистр. 08-09-2001 | Отправлено: 16:14 19-07-2022
YABaiden



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго!
Есть много файлов, которые с помощью батника архивируются и ставят в названии архива текущую дату.
Вопрос - как сделать так, чтоб этот архив был запаролен, то есть, какую команду нужно дописать в батнике, чтоб  устанавливался пароль на архив?

Всего записей: 8 | Зарегистр. 07-09-2021 | Отправлено: 16:20 19-07-2022
BorlandIMHO

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

Цитата:
если в rar архиве использована сумма blake2, то 7z будет выводить
Checksum = сумма, а не CRC = сумма.

Есть такая проблема. На выходе скрипта при этом будут файлы, содержащие исключительно заголовок.
Но её мне точно решать влом.
 
Тем более, сколь помню, стандартные .sfv содержат именно CRC32, и никаких blake2...
 
А так, при соответствующем желании, можно хоть sha256 суммы получить, причём даже без записи распакованных файлов на диск (7-zip умеет распаковывать в stdout и читать из stdin, если чё).
Код:
"c:\Program Files\7-Zip\7z.exe" e -so -- SysinternalsSuite.zip accesschk.exe |"c:\Program Files\7-Zip\7z.exe" h -si -scrcsha256 -ba
Вопрос в том, сколько своих сил вы готовы потратить на написание и отладку соответствующего скрипта и сколько вычислительных ресурсов компа на его работу...
 
А есть ещё и проблема с контрольными суммами запароленных файлов, цытирую по справке выньрар
Цитата:
Если заголовки архива не зашифрованы (не выбран параметр Шифровать имена файлов), контрольные суммы зашифрованных файлов RAR5 изменены с помощью особого, зависящего от пароля алгоритма, чтобы по контрольным суммам нельзя было угадать содержимое файлов. Поэтому не ждите, что контрольные суммы зашифрованных файлов совпадут с обычными значениями CRC32 или BLAKE2.

 
 
Добавлено:
YABaiden

Цитата:
как сделать так, чтоб этот архив был запаролен, то есть, какую команду нужно дописать в батнике, чтоб  устанавливался пароль на архив?
Зависимо от используемого архиватора. Читайте соответствующую справку.


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

Всего записей: 1607 | Зарегистр. 12-10-2006 | Отправлено: 17:18 19-07-2022 | Исправлено: BorlandIMHO, 17:29 19-07-2022
los

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

Цитата:
Тем более, сколь помню, стандартные .sfv содержат именно CRC32, и никаких blake2...  

И содержат crc архива, а не файлов нем
 

Цитата:
А так, при соответствующем желании, можно хоть sha256 суммы получить, причём даже без записи распакованных файлов на диск (7-zip умеет распаковывать в stdout и читать из stdin, если чё).  

Вообще не в кассу. CRC, CRC64, BLAKE2 содержатся в архиве и просто из него извлекаются, а не считаются в случае '7z l -slt архив' (zip, rar, 7z...), а для подсчета сумм файлов в архиве есть специальные программы.
 

Всего записей: 6052 | Зарегистр. 08-09-2001 | Отправлено: 17:38 19-07-2022
BorlandIMHO

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

Цитата:
CRC, CRC64, BLAKE2 содержатся в архиве и просто из него извлекаются

Содержатся, но не все же сразу.  
Что-то одно из трёх (для 7z), двух (для Rar) или только CRC32 {насколько я помню} для всех остальных {в которых вообще есть}.
И в подавляющем большинстве случаев именно CRC32, по умолчанию. Чтобы получить что-либо другое - требуется предпринять специальные действия до (изменение настроек архиватора по умолчанию) либо в процессе (изменение настроек непосредственно архивации) упаковки.
 
Если имеете время и желание - сделайте универсальный скрипт, который сам определяет тип контрольной суммы в архиве и извлекает соответствующий список {имя.crc32, имя.crc64 или имя.blake2}.
 

Цитата:
содержат crc архива, а не файлов нем  

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

Цитата:
Вообще не в кассу.

Просто демонстрация возможности подсчёта контрольных сумм содержимого архива без использования
Цитата:
есть специальные программы
Именно потому в демонстрации использован sha256, который {насколь я в курсе} ни в одном из форматов архива не содержится.
 
Оффтоп
 
А, и про зашифрованные файлы добавил в пост со скриптом.

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

Всего записей: 1607 | Зарегистр. 12-10-2006 | Отправлено: 20:09 19-07-2022
los

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

Цитата:
Содержатся, но не все же сразу.

ежу понятно, это было только перечисление.

Цитата:
Если имеете время и желание - сделайте универсальный скрипт, который сам определяет тип контрольной суммы в архиве и извлекает соответствующий список {имя.crc32, имя.crc64 или имя.blake2}.  

есть давно на awk и для 7z и для rar(программ, а не архивов)
 

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

Ни о чем, т.к. в архиве может быть куча файлов, а этот способ работает только для одного, потому и речь была о спец. программах. На *nix системах все это уже давно проходили
 

Цитата:
Оффтоп  

может человек хочет сравнивать суммы файлов в архиве и файлов в какой-нибудь папке - не редкая задача.

Всего записей: 6052 | Зарегистр. 08-09-2001 | Отправлено: 22:32 19-07-2022
BorlandIMHO

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

Цитата:
этот способ работает только для одного

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

Цитата:
На *nix системах все это уже давно проходили

Мне пока что проще решить эту задачу в рамках венды, нежели переходить из-за такой ерунды на *NIX. Думается, автору вопроса тоже.

Цитата:
есть давно на awk и для 7z и для rar(программ, а не архивов)

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


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

Всего записей: 1607 | Зарегистр. 12-10-2006 | Отправлено: 23:46 19-07-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

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru