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

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

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

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. Справочник администратора
 
· Скрываем консольные окна
· 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)

Всего записей: 2259 | Зарегистр. 16-10-2015 | Отправлено: 09:22 29-04-2016 | Исправлено: cchameleone, 20:42 22-02-2018
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

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

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



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

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

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



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

Цитата:
move /Y

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

Всего записей: 123 | Зарегистр. 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-а §ап¤- п
 
 

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



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

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

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



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

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

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

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



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

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

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

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



Advanced 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


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

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



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

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



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

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

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

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

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

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

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

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

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



Full 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

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

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



Advanced 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



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

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



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

Всего записей: 533 | Зарегистр. 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

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



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

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

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



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

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

Всего записей: 2159 | Зарегистр. 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
 
Подскажите, есть ли утилитки, проверяющие поток на наличие текстовой или байтовой последовательности (одной и/или нескольких) и при наличии выполняющие заданную комманду?

Всего записей: 767 | Зарегистр. 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 файле. Спасибо!

Всего записей: 265 | Зарегистр. 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" в нашем случае.
Вроде бы простая задача, но что-то туплю неимоверно. Гуглил-гуглил да не выгуглил...
 
И да, в строке может быть только одно слово.
 
Буду неимоверно благодарен за помощь. Выручайте, друзья!

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



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

Всего записей: 7270 | Зарегистр. 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

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

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru