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

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



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

Код:
@Echo Off
 
Set "BoxIn=Language"
Set "MaskIn=*_lng.ini"
 
Set "BoxOut=tmp"  
Set "MaskOut=*"
 
FOR /F "usebackq delims=" %%f IN (`Dir "%BoxIn%\%MaskIn%" /B /A:-D 2^>nul`) DO (
    FOR /F "tokens=1 delims=_" %%i IN ("%%f") DO (
        FOR /F "usebackq delims=" %%d IN (`Dir "%BoxOut%\%MaskOut%%%i" /B /A:D 2^>nul`) DO (
            Move "%BoxIn%\%%f" "%BoxOut%\%%d\" >nul
        )
    )
)
pause

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

Всего записей: 200 | Зарегистр. 26-05-2011 | Отправлено: 13:23 25-06-2018
thejustsoul



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

Цитата:
move /Y - Перезаписывать существующие файлы назначения без предупреждения.

Всего записей: 1782 | Зарегистр. 30-03-2014 | Отправлено: 14:59 25-06-2018
Alecs962



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

Цитата:
move /Y

Спс. Блин не заметил, теперь все чудесно работает.

Всего записей: 200 | Зарегистр. 26-05-2011 | Отправлено: 05:05 26-06-2018
murzik



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Inoz2000
http://forum.ru-board.com/topic.cgi?forum=5&topic=48565&start=1460#5

Цитата:
В самом прямом виде это будет так
wmic bios get SMBIOSBIOSVersion /format:list | findstr /r /v "^$" >> report.txt
echo -------------------------------------------------------->> report.txt  

Вылезла небольшая неприятность.
При выполнение такой конструкции меняется кодировка и в блокноте появляются "кракозябры"

Код:
 
 wmic os get Caption,CSDVersion,BuildNumber,osarchitecture /format:list  > r2.txt  

выдает:
BuildNumber=17134
Caption=Майкрософт Windows 10 Pro
CSDVersion=
OSArchitecture=64-разрядная
 Если удалить пустые строки, то в блокноте открывается криво

Код:
 
 wmic os get Caption,CSDVersion,BuildNumber,osarchitecture /format:list | findstr /r /v "^$" >> r1.txt

BuildNumber=17134
Caption=Њ ©Єа®б®дв Windows 10 Pro
CSDVersion=
OSArchitecture=64-а §ап¤- п
 
 

Всего записей: 3265 | Зарегистр. 03-07-2002 | Отправлено: 22:27 26-06-2018 | Исправлено: murzik, 23:04 26-06-2018
Inoz2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
murzik
Цитата:
в блокноте появляются "кракозябры"
Не используйте блокнот.

----------
Мы все умрём. (-:

Всего записей: 3456 | Зарегистр. 23-04-2009 | Отправлено: 16:44 28-06-2018
murzik



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

Цитата:
Не используйте блокнот.

К сожалению так сделать не получается.
Этот батник сделан для большого круга пользователей.
Пришлось добавить перекодировку 866->1251.
 
Ещё раз спасибо за помощь.
 
Подробнее...
 
 
 

Всего записей: 3265 | Зарегистр. 03-07-2002 | Отправлено: 17:01 28-06-2018 | Исправлено: murzik, 17:08 28-06-2018
Start



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите как переделать батник, чтобы он работал в Windows 98.
В Windows XP он работает:

Код:
@echo off
>test-XP.txt echo %SystemDrive%\\test test
@cls

Батник создаёт текстовый файл в котором записан путь относительно системного диска с добавлением \\test test

Всего записей: 615 | Зарегистр. 28-01-2006 | Отправлено: 10:14 02-07-2018 | Исправлено: Start, 23:43 02-07-2018
RetroRocket



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

Цитата:
чтобы он работал в Windows 98

Переменные %SystemDrive% и %SystemRoot% появились в NT-системах.
Для Win98 можно выделить букву системного диска из переменной %windir% так -

Код:
for /f "delims=:" %w in ('echo %windir%') do @echo %w:\\test test>test-XP.txt

Добавлено:
Для работы из батника нужно удвоить символы процента в цикле for -

Код:
for /f "delims=:" %%w in ('echo %windir%') do @echo %%w:\\test test>test-XP.txt


----------
"... Зовёт, зовёт в дорогу далёкий Млечный Путь ..."

Всего записей: 2618 | Зарегистр. 02-01-2018 | Отправлено: 08:48 03-07-2018 | Исправлено: RetroRocket, 09:07 03-07-2018
Start



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RetroRocket  
Спасибо, но код работает только в XP, а в 98 не работает - создаётся пустой файл.
И как из этого переменную сделать?
Чтобы так можно было использовать:
>test-XP.txt echo %CurDir%\\test test

Всего записей: 615 | Зарегистр. 28-01-2006 | Отправлено: 09:13 03-07-2018 | Исправлено: Start, 09:34 03-07-2018
RetroRocket



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

Цитата:
а в 98 нет.

Странно. А ругается на что-то? И чему равна %windir% у вас в Win98 ?

Цитата:
как из этого переменную сделать?

Присвоить переменной CurDir значение переменной %w из цикла for -

Код:
for /f "delims=:" %%w in ('echo %windir%') do set CurDir=%%w

Вообще, в батнике проще получить текущий путь из переменной %CD%.

----------
"... Зовёт, зовёт в дорогу далёкий Млечный Путь ..."

Всего записей: 2618 | Зарегистр. 02-01-2018 | Отправлено: 09:35 03-07-2018
Start



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пишет "Синтаксическая ошибка" и создаётся пустой файл test-98-XP.txt
 
C:\73\Test-reg>
C:\73\Test-reg>for /f "delims=:" %w in ('echo C:\WINDOWS') do @echo %w:\\test te
st>test-98-XP.txt
Синтаксическая ошибка
 
C:\73\Test-reg>pause
Нажмите любую клавишу . . .
 
 
Добавлено:
RetroRocket
Есть такой батник, он работает, но использует утилиту sbs2.com

Код:
@echo off
echo exit|%comspec% /k prompt set CurDir=$P$_| FIND " " > %temp%\SetCD.tmp
sbs2.com 0 "\" "\\" <%temp%\SetCD.tmp>%temp%\SetCD.bat
call %temp%\SetCD.bat
chcp 1251
>test-98-XP.txt echo %CurDir%\\test test тест
del %temp%\SetCD.*
@cls

Хотелось бы без неё, нужно извлечь букву системного диска в переменную, а остальное можно дописать, поскольку путь известен, и не нужно будет преобразовывать "\" в "\\".

Всего записей: 615 | Зарегистр. 28-01-2006 | Отправлено: 09:44 03-07-2018 | Исправлено: Start, 10:15 03-07-2018
RetroRocket



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

Код:
echo exit|%comspec% /k prompt set CurDir=$N$_| FIND " ">%temp%\SetCD.bat  
call %temp%\SetCD.bat  
>test-98-XP.txt echo %CurDir%:\test test тест  
del %temp%\SetCD.bat



----------
"... Зовёт, зовёт в дорогу далёкий Млечный Путь ..."

Всего записей: 2618 | Зарегистр. 02-01-2018 | Отправлено: 11:51 03-07-2018
Start



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RetroRocket, спасибо, теперь работает хорошо, даже очень, поскольку используется буква не системного диска, а того с которого запущен батник, что даже лучше.

Всего записей: 615 | Зарегистр. 28-01-2006 | Отправлено: 14:20 03-07-2018
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нашел новый способ получения длины строки. Работает немного быстрее старого рекордсмена - с использованием временного файла, при это не требует ни создания файлов на диске, ни внешних программ. Поддерживаются строки длиной до 8188 символов включительно.
 
Подробнее...
 
Можно также реализовать в виде переменной-подпрограммы:
Подробнее...
Так работает гораздо быстрее, чем при вызове через CALL:

Код:
 
set S=1111111111111111111111111111111111111111111111111111111111
for /f "tokens=1,2" %%a in ("S Len") do %GetLen%
echo %Len%
 


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

Всего записей: 3075 | Зарегистр. 18-04-2005 | Отправлено: 15:23 08-07-2018
Inoz2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Что-то знакомое
http://forum.script-coding.com/viewtopic.php?pid=71000#p71000
Подробнее...

----------
Мы все умрём. (-:

Всего записей: 3456 | Зарегистр. 23-04-2009 | Отправлено: 16:08 08-07-2018
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Inoz2000
Ну, это какое-то очень сильное колдунство. Я даже понять не могу, чего там делается. Одно ясно - не очень похоже на мое. Хотя тоже работает.

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

Всего записей: 3075 | Зарегистр. 18-04-2005 | Отправлено: 10:54 09-07-2018
DCT

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для процедуры ручного восстановления данных мне необходимо сохранить содержимое секторов, содержащих текстовую/байтовую последовательность в файлы с именем = номеру сектора.
 
Для этого в for-цикле буду перебирать в %i номера всех секторов, и далее выполнять примерно такую комманду:
 
dd bs=4096 count=1 skip=%i if=\\?\Device\Harddisk1\Partition0 | (если в потоке есть заданная последовательность, исполняем): dd bs=4096 count=1 skip=%i if=\\?\Device\Harddisk1\Partition0 of=%i.binary
 
Подскажите, есть ли утилитки, проверяющие поток на наличие текстовой или байтовой последовательности (одной и/или нескольких) и при наличии выполняющие заданную комманду?

Всего записей: 784 | Зарегистр. 22-12-2005 | Отправлено: 20:57 09-07-2018 | Исправлено: DCT, 20:58 09-07-2018
bormpe



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще раз попробую, возможно подскажете:
 
есть программа file.exe, которая из командной строки замечательно работает:
voro++.exe -p -c %a 0 1 0 1 0 1 res
 
если делаю батник в котором та же строчка, то ночего не работает и как я вуяснил из за того, что если запускаю батник, то знак % в нем не читается и получается фигня.  
Что посоветуете.
 
   
 
 
Добавлено:
задал вопрос и сразу нашел ответ: поставил %% в bat файле. Спасибо!

Всего записей: 268 | Зарегистр. 02-09-2002 | Отправлено: 21:00 12-07-2018
Sanatory



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет!
Помогите с кодом, пожалуйста.
 
Батник должен работать в Windows 7.
Есть строка со "словами", разделёнными пробелами, к примеру:

Цитата:
FileName https://youtu.be/LD7doMdjywo 1531883217 https://www.youtube.com/watch?v=LD7doMdjywo lastWord

 
Требуется удалить из неё всё, что идёт перед последним пробелом. То есть, оставить только "lastWord" в нашем случае.
Вроде бы простая задача, но что-то туплю неимоверно. Гуглил-гуглил да не выгуглил...
 
И да, в строке может быть только одно слово.
 
Буду неимоверно благодарен за помощь. Выручайте, друзья!

Всего записей: 89 | Зарегистр. 21-04-2010 | Отправлено: 11:48 18-07-2018 | Исправлено: Sanatory, 11:53 18-07-2018
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Sanatory
Если количество значений всегда фиксированное и ни одно не содержит пробелов/табуляций:
Цитата:
for "tokens=5" %%a in ("<ваша строка>") do echo %%a
%%a - это искомое слово, после 4-го пробела

Всего записей: 10071 | Зарегистр. 11-03-2002 | Отправлено: 12:01 18-07-2018
   

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