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

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

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

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

Всего записей: 37439 | Зарегистр. 26-02-2002 | Отправлено: 13:35 19-09-2020 | Исправлено: Maz, 07:16 24-04-2021
yozhic



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
Спасибо большое. Батники отрабатывают правильно. Но вот засада, каждая строка в исходном файле – это base64-закодированный png, т.е. строки длинные и поэтому, наверное, cmd при обработке падает с ошибкой

Код:
The instruction at 0x00d74c02 referenced memory at 0x00000000. The memory could not be read.

Первый раз с таким сталкиваюсь. Видимо, cmd слабовата для таких задач, придётся на autoit что-то ваять. Ещё раз спасибо за помощь.

Всего записей: 2057 | Зарегистр. 20-03-2008 | Отправлено: 17:09 06-08-2021
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yozhic
Попробуйте на PowerShell, может и сработает
 

Код:
$line_number = 1
Get-Content .\file.txt | ForEach-Object {
    $_ | Out-File .\file_$($line_number.ToString('000')).txt -Encoding ASCII
    $line_number++
}  


Всего записей: 408 | Зарегистр. 12-09-2017 | Отправлено: 17:51 06-08-2021 | Исправлено: Fenrizz, 17:55 06-08-2021
los

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
yozhic,
если установлен wsl или просто unix utilities, то
split -l1 file.txt
где l1 - кол-во строк.

Всего записей: 4583 | Зарегистр. 08-09-2001 | Отправлено: 17:53 06-08-2021
yozhic



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz, los
Спасибо ещё раз! Оба способа отработали прекрасно. split.exe взял из пакета GoW – очень доволен, отличный пакет, совсем забыл про него.

Всего записей: 2057 | Зарегистр. 20-03-2008 | Отправлено: 20:04 06-08-2021
anynamer



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как скачать набор файлов (например с wget), если есть почти одинаковая ссылка, только в конце нужно менять нумерацию (диапазон цифр)
http://link.org//1.jpg
...
http://link.org/99.jpg
 
Чтобы не писать все 99 ссылки?

Всего записей: 1944 | Зарегистр. 17-05-2010 | Отправлено: 20:30 11-08-2021
BorlandIMHO

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

Цитата:
Как скачать набор файлов (например с wget), если есть почти одинаковая ссылка, только в конце нужно менять нумерацию (диапазон цифр)
http://link.org//1.jpg
...
http://link.org/99.jpg
wGetIt.cmd

Код:
for /l %%N in (1,1,99) do wget http://link.org//%%N.jpg
 


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

Всего записей: 1244 | Зарегистр. 12-10-2006 | Отправлено: 22:53 11-08-2021
mireg

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите ,пожалуйста, почему не выполняется команда?
xcopy "C:\Program Files x(86)\FAR\*.*"   C:\Arhiv\B5\  /Y /J /D > C:\Arhiv\B5\LOG.TXT
Вроде бы путь ,содержащий пробелы,должен  заключен быть  в кавычки
Команда
xcopy "C:\Program Files\FAR\*.*"   C:\Arhiv\B5\  /Y /J /D > C:\Arhiv\B5\LOG.TXT
отрабатывает
 
Путь "C:\Program Files x(86)\FAR\*.*" копирывал точно как он есть

Всего записей: 7 | Зарегистр. 26-12-2014 | Отправлено: 09:15 12-08-2021
userrus

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
нет такой папки "c:\Program Files x(86)\" есть c:\Program Files (x86)\

Всего записей: 78 | Зарегистр. 27-09-2005 | Отправлено: 10:40 12-08-2021
mireg

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

Цитата:
нет такой папки "c:\Program Files x(86)\" есть c:\Program Files (x86)\
 

СПАСИБО. Извините за беспокойство. Просмотрел.

Всего записей: 7 | Зарегистр. 26-12-2014 | Отправлено: 11:16 12-08-2021
Artem_Butenko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, пожалуйста, подскажите каким образом проверить значение параметра в системном реестре. Если оно не равно, например, 1.0.00000, то завершить пакетный сценарий?
 
Добавлено:
Разобрался, можно наверное так:
Reg Query "HKLM\SOFTWARE\MyProgram\Settings" /v "Version" | findstr /i "1.0.00000" || Exit

Всего записей: 657 | Зарегистр. 19-02-2008 | Отправлено: 23:10 13-08-2021
BorlandIMHO

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

Цитата:
 findstr /i "1.0.00000"

Возможно, для ваших целей этого и будет достаточно, но: нужно понимать, что в таком виде оно среагирует не только на искомое "1.0.00000", но также и на "Version 1.0.00000", и на "101.0.000009".
Если уж проверять точное совпадение - то
Код:
for /f "usebackq tokens=3*" %%A in (`Reg Query "HKLM\SOFTWARE\MyProgram\Settings" /v "Version"`) do if /I "%%~A*" NEQ "1.0.00000*" exit


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

Всего записей: 1244 | Зарегистр. 12-10-2006 | Отправлено: 23:56 13-08-2021 | Исправлено: BorlandIMHO, 23:59 13-08-2021
Artem_Butenko



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

Код:
for /f "usebackq tokens=3*" %%A in (`Reg Query "HKLM\SOFTWARE\MyProgram\Settings" /v "Version"`) do if /I "%%~A*" NEQ "1.0.00000*" exit

 
Спасибо, подскажите пожалуйста, каким образом грамотно выполнить проверку в системном реестре ключа, параметра и значения параметра, с выводом Echo сообщения и завершением пакетного сценария в случае ошибок одного из условий?
 
Добавлено:
Я начинал пакетный файл следующим образом, но сам понимаю, что подобное не совсем корректно.

Всего записей: 657 | Зарегистр. 19-02-2008 | Отправлено: 00:13 14-08-2021 | Исправлено: Artem_Butenko, 00:22 14-08-2021
BorlandIMHO

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

Цитата:
ключа, параметра и значения параметра


Код:
@echo OFF
REM ключ
1>nul 2>&1 Reg Query "HKLM\SOFTWARE\MyProgram\Settings" || call :ABORT "Не найден ключ HKLM\SOFTWARE\MyProgram\Settings"
REM параметр
1>nul 2>&1 Reg Query "HKLM\SOFTWARE\MyProgram\Settings" /v "Version" || call :ABORT "Не найден параметр Version ключа HKLM\SOFTWARE\MyProgram\Settings"
REM значение
for /f "usebackq tokens=3*" %%A in (`Reg Query "HKLM\SOFTWARE\MyProgram\Settings" /v "Version"`) do if /I "%%~A*" NEQ "1.0.00000*" call :ABORT "Значение параметра Version ключа HKLM\SOFTWARE\MyProgram\Settings %~A не совпадает с искомым 1.0.00000"
 
.....
goto :EOF
 
:ABORT
echo Аварийное завершение скрипта
echo Причина: %~1
pause
exit


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

Всего записей: 1244 | Зарегистр. 12-10-2006 | Отправлено: 00:48 14-08-2021
Artem_Butenko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
 
Огромнейшее Вам спасибо! Изучаю. Извиняюсь за мой

Всего записей: 657 | Зарегистр. 19-02-2008 | Отправлено: 00:53 14-08-2021 | Исправлено: Artem_Butenko, 01:21 14-08-2021
Fenrizz



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

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

Если добавить ключ /X то будет искать только точное соответствие, но тогда надо строку полность писать, типа  
findstr /i /x "Version-1.0.00000"

Всего записей: 408 | Зарегистр. 12-09-2017 | Отправлено: 06:52 14-08-2021 | Исправлено: Fenrizz, 11:01 14-08-2021
BorlandIMHO

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
findstr - вообще вещь в себе. Не далее, как в прошлом году обсуждалось (отсюда и далее)...
Именно поэтому предпочитаю обходиться без неё там, где это вообще возможно.

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

Всего записей: 1244 | Зарегистр. 12-10-2006 | Отправлено: 21:50 14-08-2021
Baltazar500



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток.
 
Как зарядить весь выхлоп for (например)

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

в clip, не оборачивая for в отдельный bat/cmd файл ?

Всего записей: 1736 | Зарегистр. 19-09-2011 | Отправлено: 08:59 15-08-2021
Pasha_ZZZ



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

Цитата:
(for /L %t in (0,1,1) do @echo %t)|clip

Всего записей: 10071 | Зарегистр. 11-03-2002 | Отправлено: 09:14 15-08-2021
Baltazar500



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

Код:
 
C:\Users\Admin>echo 0  
0  
 
C:\Users\Admin>echo 1  
1  
 
нужно только то, что было выхлопнуто во всех итерациях разом отправить в буфер обмена. Не добавляя ничего, хм, лишнего.

Всего записей: 1736 | Зарегистр. 19-09-2011 | Отправлено: 01:52 17-08-2021 | Исправлено: Baltazar500, 01:55 17-08-2021
BorlandIMHO

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

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

Вывод в stdout самой команды, помимо результата её работы, регулируется echo [ON/OFF], а также "@" перед непосредственно командой.
Соответственно, либо

Код:
echo OFF
где-нибудь в начале скрипта, либо @ перед каждой командой, которую вы не хотите видеть в stdout.
 
И да, в варианте от Pasha_ZZZ, скопипащенном непосредственно из поста, ничего лишнего в буфер не попадает именно засчёт @ перед echo.


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

Всего записей: 1244 | Зарегистр. 12-10-2006 | Отправлено: 06:32 17-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

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


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru