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

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

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

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

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



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

Цитата:
bomzz
красивая строка. все понять не могу как это работает

 
   
 
а. получаем текст (сообщения и ошибки программы, поэтому 2>&1) и передаём дальше через «трубу» |
б. ищем в тексте заданную фразу (без учёта регистра, ибо /i) и скрываем результат (используя >nul)
в. если фраза нашлась, то выполняем команды после &&, а если не нашлась, то команды после ||
 
Фрагмент «в» можно заменить на новую строку с if errorlevel 1 (echo Нет) else (echo Да). См. пример.

Всего записей: 838 | Зарегистр. 01-03-2003 | Отправлено: 23:46 10-06-2021 | Исправлено: kraeved, 23:34 13-06-2021
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
спасибо.
 
интересная фигня. сделал батник пользовался недели две. заметил лишнюю скобку. убрал все равно работает.
цикл FOR принципиально пустые строки пропускает при разборе текстовых файлов и ничего с этим не поделать?
 
Добавлено:
kraeved
чем &1 и nul отличаются?
https://www.celitel.info/klad/bathelp/redirect.htm

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 08:15 12-06-2021 | Исправлено: bomzz, 08:22 12-06-2021
Andy_Urb



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть коллекция фильмов на компе - все переименованы по типу:

Цитата:
Интерстеллар(Interstellar)2014,BDRip(1080p)Фантастика,драма,приключения,Дублированный.mkv

Есть возможность смотреть эти фильмы по сети на SMAT TV
Но тут есть проблема - телевизор показывает не имена файлов а а берет данные для отображение из Title.
Есть утилита mkvpropedit позволяющая изменить любой параметр в файле (в том числе и title).
В командной строке это выглядит так:
mkvpropedit.exe Files.MKV -s title="Files.MKV"
Помогите автоматизировать процесс изменения Title в папке.
Заранее благодарю.

Всего записей: 1119 | Зарегистр. 24-09-2003 | Отправлено: 09:16 12-06-2021
Baltazar500



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kraeved, тут ещё заминка вылезла с
Код:
adb devices 2>&1
при перенаправлении stderr в stdout эта сволочь зависает, если ранее был произведён kill-server, в итоге всё последующее накрывается медным тазом.
Код:
if errorlevel 1 echo Нет else echo Да
наверное надо так ?
Код:
if errorlevel 1 (echo Нет) else (echo Да)

upd: При использовании команды с таким костылём
Код:
adb start-server && adb devices 2>&1 | findstr /R "emulator-[0-9]*" >nul || if errorlevel 1 (echo Нет) else (echo Да)
реакция есть только в случае, когда строки нет. По else, когда строка есть, реакция не идёт, хотя по идее должна. В целом, поставленная задача выполнена, но хотелось бы "добить" этот вопрос, дабы внести ясность
 
Andy_Urb,
Код:
for %v in (*.mkv) do mkvpropedit.exe "%v" -s title="%v"

Всего записей: 1736 | Зарегистр. 19-09-2011 | Отправлено: 09:37 12-06-2021 | Исправлено: Baltazar500, 09:56 12-06-2021
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Andy_Urb
чтоб смотреть файлы с компа по технологии смарт тв, вместе с iptv телевидением,
расшарь папку с нужными файлами по http с помощью программы HFS
https://www.rejetto.com/hfs/
рядом с исполняемым файлом программы размести вот такой файл с именем hfs.filelist.tpl

Цитата:
<head>
    <meta charset=UTF-8">
</head>
#EXTM3U
 
%list%
 
[file]
#EXTINF:-1 group-title="FILES",%item-name%
%item-full-url%

hfs.filelist.tpl 135 байт
по ссылке:
http://ип адрес локального сервера/имя расшаренной папки/~files.lst?recursive
будет скачиваться плейлист со всеми файлами папки.
чтоб пауза на плеере работала измени в настройках программы параметр
menu - limits - connection inactivity timeout
на пустое поле. ну я еще маску настраиваю, в свойствах папки, чтоб торрент файлы не отражались.

Цитата:
*.mkv;*.mp4;*.avi;*.ts;*.m2ts;

эту ссылку укажи второй в твоем плеере и файлы с компа будут отражаться в отдельной группе FILES
имена файлов значения не имеют. если даже из за всяких скобок имя в плейлисте отразится неправильно,
то показывать все равно будет. перемотка работает. 4к видео пролазит практически до 82-83 мбит аудио+видео стрим в сек.
самодельные блюреи с большим битрейтом просто в сеть не пролазят
на больших скоростях не испытывал. если у тебя локальная сеть 1000 мбит и будешь пробовать отпишись
 
Подробнее...
в конкретно моем случае ссылка такая: h__p://192.168.1.69/1/~files.lst?recursive
 
Добавлено:
kraeved
картинка и слово труба помогают пониманию. разбираюсь

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 11:33 12-06-2021 | Исправлено: bomzz, 12:03 12-06-2021
kraeved



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzz
Консольной программе доступны несколько каналов для оповещения о состоянии работы.
Нас интересуют stdout, stderr и errorlevel. Первый канал (standard output) задуман для отчёта
о решаемой задаче, второй канал (standard error) — для отчёта об ошибках. То, что мы видим
на экране, собирается из этой пары каналов, но машина по-прежнему видит их по отдельности.
Команда 2>&1, подобно переключению ж/д стрелки, направляет второй канал в первый канал,
сводя поступающие сообщения воедино для «глаз» машины. Их можно скрыть во тьме >nul,
записать в >файл или дописать в его >>конец, передать другой программе через «трубу» |.
Третий канал (errorlevel) — это код завершения, обычно принимающий значение 0 (успех) или
1 (ошибка). Если сетевой код типа 404 (ресурса нет) иногда виден в браузере, то код errorlevel
остаётся улавливать. На деле каналы используют как бог на душу положит. Скажем, прогресс
сжатия через 7-zip видим в stdout, а прогресс lame или curl видим уже в stderr. Или, например,
код 0 у diff означает, что сравниваемые файлы одинаковы, 1 — отличаются, 2 — ошибка.
 
 
   
 
 
Baltazar500
С adb 31.0.2 работает без зависаний. Убрав 2>&1 и >nul, увидите поступающие сообщения.
 
@echo off
rem Нет
adb devices 2>&1 | findstr /i "woof" >nul && echo Да || echo Нет
adb kill-server
    rem Да
    adb devices 2>&1 | findstr /i "list" >nul && echo Да || echo Нет
    adb kill-server
        rem Нет
        adb devices 2>&1 | findstr /i "woof" >nul
        if errorlevel 1 (echo Нет) else (echo Да)
        adb kill-server
            rem Да
            adb devices 2>&1 | findstr /i "list" >nul
            if errorlevel 1 (echo Нет) else (echo Да)
            adb kill-server
goto :eof

Всего записей: 838 | Зарегистр. 01-03-2003 | Отправлено: 01:06 13-06-2021 | Исправлено: kraeved, 23:47 14-06-2021
Baltazar500



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kraeved, ОК. Спасибо. Гляну скрипт, как буду за компом. А при редиректе 2>&1 у вас adb не залипает ? Ну и по else, с использованием errorlevel, когда строка есть, у вас реакция идёт ?

Всего записей: 1736 | Зарегистр. 19-09-2011 | Отправлено: 06:04 13-06-2021 | Исправлено: Baltazar500, 06:05 13-06-2021
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
!str1:!str2!=! как правильно такую конструкцию составить чтоб из переменной 1 исключить переменную 2
!str1:%%b=! - так работает

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 09:51 13-06-2021
GCRaistlin



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

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

Всего записей: 3086 | Зарегистр. 18-04-2005 | Отправлено: 10:39 13-06-2021
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
любапытна. так как мне эти манипуляции нужны для дальнейшего сравнения строк,
вместо того чтоб удалить текст, я добавил его к другой строке, другому параметру сравнения.
нетривиально выкрутился

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 10:49 13-06-2021
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
кодировка конечного файла зависит не от русских букв в имени, а от того батник работает на системном диске или нет. странно. никто не понимает как поправить? на хп такого не замечал, семерка.

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 14:43 13-06-2021
kraeved



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 
В школьном курсе информатики учат, как в одной лодке переправить через реку
волка, козу и капусту и как передвинуть ханойскую башню. А составлению отчёта
о проблеме по-прежнему не учат, хотя то полезно не только в эпоху цифровизации,
но и в целом для объяснения с людьми, — с людьми разного уровня одарённости, но,
вероятно, равно лишённых способности читать чужие мысли. В частности, вам скорее
помогут с решением проблемы, если дадите её в воспроизводимой форме, т.е. когда
можно взять материал и увидеть проблему у себя, а не гадать, что вы имели в виду.

Всего записей: 838 | Зарегистр. 01-03-2003 | Отправлено: 22:50 13-06-2021 | Исправлено: kraeved, 17:18 14-06-2021
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а тут то чем помочь, никто не будет ковыряться у меня на компе, только если кто то о подобной проблемы слышал или сталкивался. у меня файлы исходные, промежуточные и результативные в разных кодировках 65001 1251, а результаты отличаются в зависимости от того на каком диске размещен редактирующий батник.
 
Добавлено:
я батник делаю на рабочем столе, добиваюсь результата который мне нужен, а потом готовые спихиваю в папку на другом не системном диске и результирующие файлы меняют кодировку. вот только заметил с чем связано.

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 06:59 14-06-2021
BorlandIMHO

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

Цитата:
результаты отличаются в зависимости от того на каком диске размещен редактирующий батник

Не имею оснований не верить в различие результатов. Но: причина различия наверняка не в местоположении файлов как таковом, а в чём-то ещё. Например, если батник в зависимости от местоположения меняет логику выполнения (в т.ч. использует разные кодировки). Чудес - не бывает...

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

Всего записей: 1244 | Зарегистр. 12-10-2006 | Отправлено: 12:54 14-06-2021
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzz
Упростите логику скрипта до максимума. Буквально чтобы в нем была единственная команда (внутренняя!), перенаправляющая вывод в файл. И проверьте его кодировку.

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

Всего записей: 3086 | Зарегистр. 18-04-2005 | Отправлено: 13:17 14-06-2021
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
у меня уже другая версия родилась, исходный файл в 65001 кодировке содержит символы в разных кодировках и в зависимости от того какой попадается в начале в такой кодировке и создается файл.
в другом батнике который сравнивал подстроки обнаруживалсь ошибка, которая устранилась после конвертации 65001 в 1251. при том что оба сравниваемых файла были в 65001.
кстати никто способа не знает как конвертировать батником? то что нагуглил про другие кодировки
 
Добавлено:

Цитата:
@ECHO OFF
COLOR 9F
cd /d %~dp0
chcp 65001
cmd /u/c type utf8.txt >utf16.txt
chcp 1251
type utf16.txt >win1251.txt
chcp 866
PAUSE

не пашет. оба файла в 1200

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 15:37 14-06-2021 | Исправлено: bomzz, 15:38 14-06-2021
BorlandIMHO

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

Цитата:
никто способа не знает как конвертировать батником?

"Голым" батником - не получится. Придётся привлекать некую внешнюю утилиту типа iconv, либо powershell/vbs/jscript.
На powershell:

Код:
powershell -nologo -Command "Get-Content -Encoding UTF8 '.\File-UTF8.txt'|Set-Content -Encoding OEM '.\File-OEM.txt'"
powershell -nologo -Command "Get-Content -Encoding UTF8 '.\File-UTF8.txt'|Set-Content -Encoding Unicode '.\File-UTF16LE.txt'"
powershell -nologo -Command "Get-Content -Encoding UTF8 '.\File-UTF8.txt'|Set-Content -Encoding ASCII '.\File-ASCII.txt'"
powershell -nologo -Command "Get-Content -Encoding UTF8 '.\File-UTF8.txt'|Set-Content -Encoding default '.\File-1251.txt'"


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

Всего записей: 1244 | Зарегистр. 12-10-2006 | Отправлено: 16:25 14-06-2021 | Исправлено: BorlandIMHO, 16:40 14-06-2021
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzz
С файлами в кодировке 1200 cmd.exe работать не будет.

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

Всего записей: 3086 | Зарегистр. 18-04-2005 | Отправлено: 17:07 14-06-2021
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
у меня новая версия в акелпаде ошибка в зависимости от вложенности пути

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 20:22 14-06-2021
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
самое удачное получилось привести файлы 65001 к 1251 и в ней обрабатывать.
тогда все поиски срабатывают нормально.

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 12:23 15-06-2021 | Исправлено: bomzz, 12:23 15-06-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 60

Компьютерный форум 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