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

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

Всего записей: 2279 | Зарегистр. 16-10-2015 | Отправлено: 09:22 29-04-2016 | Исправлено: Maz, 08:47 26-03-2020
NIKZZZZ



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VVL99
А что представляют 9 символов, которые нужно обрезать?
Возможно, задачу можно решить значительно проще.  

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:32 24-07-2019
VVL99

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ (пост)
Цитата:
А что представляют 9 символов, которые нужно обрезать?  
Возможно, задачу можно решить значительно проще.
Так-то да, даже np++ умеет такое, задача не моя, а senderman (пост) я просто решил сам попробовать (как та собака, которая когда догонит, не знает что дальше делать).
Какие строки у автора не знаю, я просто проверял на : 123456789str 1.

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 14:46 24-07-2019 | Исправлено: VVL99, 15:50 24-07-2019
senderman

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
 
Затратно по времени вот что:
 
set sValue=%~1
 
Я соорудил оба скрипта и проверил на файле длиной ~1 МБ. Оказалось, что время обработки приближается к 10 секундам ! У первого скрипта это время менее секунды.
 
 
Добавлено:
NIKZZZZ
 
Это случайное число. Задача оба скрипта сделать одиноково быстрыми.

Всего записей: 1488 | Зарегистр. 16-03-2019 | Отправлено: 15:28 24-07-2019 | Исправлено: senderman, 15:38 24-07-2019
NIKZZZZ



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

Цитата:
Это случайное число.

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

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 15:37 24-07-2019
GCRaistlin



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

Цитата:
Я соорудил оба скрипта и проверил на файле длиной ~1 МБ. Оказалось, что время обработки приближается к 10 секундам ! У первого скрипта это время менее секунды.

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

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

Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 15:39 24-07-2019
senderman

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
 
VVL99 Предложил решение избавляющее от проблемы с "!" в имени файла. Я его опробовал и оно оказалось работоспособным, но заторможенным. Спорта ради пробую его ускорить.
 
Отсеиваются начало строк ("Т:2443d5f564 ") вида: "Т:2443d5f564 ffff cccc ddd aaaa".  
 
Добавлено:
GCRaistlin
 
Задача оба скрипта сделать одиноково быстрыми.
 
Файл состоит из такого содержимого:
 
S:1FF00000 4010 E92D 0178 EB00 0058 E59F 01BE E1D0  
S:1FF00010 007B EB00 4000 E1A0 2C0E E3A0 1048 E59F  
S:1FF00020 0B79 E282 0019 EB00 0001 E3A0 7C73 EB04  
S:1FF00030 0038 E59F 2C02 E3A0 1000 E3A0 004C EB00  
S:1FF00040 102C E59F 40B0 E1C1 79FB EB04 0002 E3A0  
S:1FF00050 7C6A EB04 7A73 EB04 7AC6 EB04 4010 E8BD  
S:1FF00060 0902 E3A0 7C65 EA04 A800 1C00 0B20 1FF0  
S:1FF00070 5E00 0400 5F94 0400 16D0 E59F 22BC E1D1  
S:1FF00080 0020 E312 FFFC 0AFF 02B4 E1C1 FF1E E12F  
S:1FF00090 4010 E92D 3000 E1A0 C1A2 E1A0 0016 EA00  
S:1FF000A0 4000 E5D1 E001 E281 1001 E283 4000 E5C3  
S:1FF000B0 3000 E5DE C001 E24C 3000 E5C1 3001 E5DE  
.......................................

Всего записей: 1488 | Зарегистр. 16-03-2019 | Отправлено: 15:49 24-07-2019 | Исправлено: senderman, 16:36 24-07-2019
NIKZZZZ



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

Цитата:
Отсеиваются начало строк ("Т:2443d5f564 ") вида: "Т:2443d5f564 ffff cccc ddd aaaa".  

Тогда вот оптимальное решение
 

Код:
@echo off  
>nul 2>&1 del /q txt1.txt
for /f "UseBackQ tokens=1,* delims= " %%a in ("txt.txt") do (>>txt1.txt echo;%%b)

 
 

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 16:00 24-07-2019 | Исправлено: NIKZZZZ, 16:26 24-07-2019
GCRaistlin



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

Цитата:
Файл состоит из такого содержимого:

Предлагаете накопипастить мегабайт вручную?

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

Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 16:09 24-07-2019
senderman

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
 
Спасибо!
 
GCRaistlin
 
Не вручную, а скриптом.

Всего записей: 1488 | Зарегистр. 16-03-2019 | Отправлено: 16:39 24-07-2019 | Исправлено: senderman, 16:44 24-07-2019
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
senderman
Вам лень заливать - мне лень скрипт писать.

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

Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 17:58 24-07-2019
VVL99

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот ещё один вариант от первого короче на одну строку, по скорости такой же (6000 строк ~2 сек.):

Код:
@echo off
title v4
echo %time%
for /f "UseBackQ delims=" %%a in ("txt&!.txt") do (
    setlocal enabledelayedexpansion
    set "str=%%a"
    echo !str:~9! >> "temp"
    endlocal
)
del "txt&!.txt"
rename "temp" "txt&!.txt"
echo %time%
pause

Опять же если сравнивать с этим:
(оригинал)

Код:
@echo off
title v5
echo %time%
for /f "UseBackQ tokens=1,* delims= " %%a in ("txt&!.txt") do (
    echo %%b >> "temp"
)
del "txt&!.txt"
rename "temp" "txt&!.txt"
echo %time%
pause

То последний выполняет всё за ~0.7 сек, но у него и задача другая, убрать первое слово, а не первые 9 символов.

Всего записей: 4158 | Зарегистр. 03-02-2011 | Отправлено: 19:53 24-07-2019 | Исправлено: VVL99, 20:07 24-07-2019
senderman

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

Код:
@echo off
set sFile=%~1
(for /f "UseBackQ tokens=1,* delims= " %%a in ("%sFile%") do (echo;%%b)) >"%sFile%".txt
exit /b 0


Код:
@echo off
set sFile=%~1
(for /f "UseBackQ tokens=* delims=" %%i in ("%sFile%") do (
    set sValue=%%i
    setlocal enableextensions enabledelayedexpansion
    echo !sValue:~11!
    endlocal
    )) >"%sFile%".txt
exit /b 0


Код:
@echo off
set sFile=%~1
(for /f "UseBackQ tokens=* delims=" %%i in ("%sFile%") do (call :wr "%%i")) >"%sFile%".txt
exit /b 0
:wr
    set sValue=%~1
    echo %sValue:~11%

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

Всего записей: 1488 | Зарегистр. 16-03-2019 | Отправлено: 00:52 25-07-2019 | Исправлено: senderman, 02:19 25-07-2019
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
senderman
Операции с FOR-переменными должны проводиться при отключенном delayed expansion.

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

Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 01:24 25-07-2019
senderman

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
 
Используя эти соображения внеситете свои правки в тексты скриптов. Эти тексты имеют собирательный характер и ошибки в них неизбежны.

Всего записей: 1488 | Зарегистр. 16-03-2019 | Отправлено: 01:40 25-07-2019
GCRaistlin



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

Цитата:
при наличии файла 1.cmd запустит его. Это не дело. Вариант 3

... который запустит файл 1^.cmd (я почему-то решил, что "^" - запрещенный символ). Поэтому - вариант 4:

Код:
 
2>nul (set "Arg=%1"^|
)
if errorlevel 1 2>nul (set Arg=%1^|
rem Don't delete this line
) else set "Arg=%1" & goto $endif
if errorlevel 1 (set/a0) else set Arg=%1
 
 
rem Don't delete 2 blank lines above
:$endif
 


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

Всего записей: 3962 | Зарегистр. 18-04-2005 | Отправлено: 10:50 25-07-2019
senderman

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
С обрезанием вроде бы как бы разобрались. Есть еще один вопрос - наличие где-нибудь BAT-файла выполняющего трансформацию hex-дампа в бинарное представление аналогично программе "xxd".

Всего записей: 1488 | Зарегистр. 16-03-2019 | Отправлено: 12:09 25-07-2019 | Исправлено: senderman, 12:12 25-07-2019
NIKZZZZ



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

Цитата:
BAT-файла выполняющего трансформацию hex-дампа в бинарное представление

Чисто батником не получится, если только комбинированным, например bat+vbs.

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 13:03 25-07-2019
senderman

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NIKZZZZ
 
Пока скомбинирую bat+xxd.сом. Так быстрее и проще будет. Если браться за полноценное программирование, то лучше не комбинировать, а всю задачу целиком в языке решать.
 
А получится свопинг байтов произвести:
 
4010 E92D 0178 EB00 0058 E59F 01BE E1D0  ->
1040 2DE9 7801 00EB 5800 9FE5 BE01 D0E1  ?

Всего записей: 1488 | Зарегистр. 16-03-2019 | Отправлено: 13:19 25-07-2019 | Исправлено: senderman, 13:33 25-07-2019
mat86



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пытаюсь сделать батник который бы вытаскивал информацию из реестра о ip адресе сетевой карты.
Первый вариант такой

Цитата:
 
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\Tcpip\Parameters\Interfaces\{33303D36-0D03-4C8E-A82E-7C5C29A5AE0E}"^|Find /I "DefaultGateway"`) Do Echo %%J>>text.txt
 
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\Tcpip\Parameters\Interfaces\{33303D36-0D03-4C8E-A82E-7C5C29A5AE0E}"^|Find /I "SubnetMask"`) Do Echo %%J>>text.txt
 
For /F "UseBackQ Tokens=2*" %%I In (`Reg Query "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\Tcpip\Parameters\Interfaces\{33303D36-0D03-4C8E-A82E-7C5C29A5AE0E}"^|Find /I "IPAddress"`) Do Echo %%J>>text.txt

 
Но папка {33303D36-0D03-4C8E-A82E-7C5C29A5AE0E} на каждом пк разная, как сделать чтобы искались во всех подпапках?

Всего записей: 438 | Зарегистр. 19-03-2009 | Отправлено: 14:56 26-07-2019
NIKZZZZ



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

Цитата:
А получится свопинг байтов произвести:


Код:
set hex=4010 E92D 0178 EB00 0058 E59F 01BE E1D0
echo %hex:~2,2%%hex:~0,2% %hex:~7,2%%hex:~5,2% %hex:~12,2%%hex:~10,2% %hex:~17,2%%hex:~15,2% %hex:~22,2%%hex:~20,2% %hex:~27,2%%hex:~25,2% %hex:~32,2%%hex:~30,2% %hex:~37,2%%hex:~35,2%

Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 16:03 26-07-2019
   

Страницы: 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.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru