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

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

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

Maz



Дед Мазай
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
часть 1 | часть 2 | часть 3 | часть 4 | часть 5 | часть 6
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

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

Всего записей: 39199 | Зарегистр. 26-02-2002 | Отправлено: 22:41 20-06-2024 | Исправлено: Maz, 21:52 28-09-2024
Simple Code

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Вы правы.
 
LZAA
Вот исправил.

Код:
 
@echo off
call :TimerRun 00-00-00
echo Your main code!
 
exit
:TimerRun [%1 Hours-Minutes-Seconds]
setlocal EnableDelayedExpansion
:Loop
for /f "Tokens=1,2,3,4 Delims=:, " %%a in ("%time%") do (
    if %%~a LSS 10 (set th=0%%~a) else (set th=%%~a)
    if NOT "%~1"=="!th!-%%~b-%%~c" (
        timeout /T 1 >nul 2>&1
        goto :Loop
    )
) & endlocal & exit /b
 

Всего записей: 278 | Зарегистр. 19-11-2022 | Отправлено: 21:38 29-12-2024 | Исправлено: Simple Code, 22:24 29-12-2024
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Simple Code
После каждого перехода в :TimerRun выполняется SETLOCAL. Это тормоза и чревато превышением максимума вложенных SETLOCAL.

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

Всего записей: 4201 | Зарегистр. 18-04-2005 | Отправлено: 22:06 29-12-2024
LZAA

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
   Ещё одно обстоятельство xoчу уточнить на примере выполнения кода для одной команды.
    Вариант 1.
 
@echo off
call :TimerRun xx-yy-zz
start Команда_1
...
 
   Вариант 2.
 
@echo off
call :TimerRun xx-yy-zz
Команда_1
...
 
  Мне удобнее первый вариант, потому что если мы пакетным файлом запускаем 'x.exe' c GUI, то окно 'cmd' автоматически не закрывается, что не есть good.

Всего записей: 2402 | Зарегистр. 09-01-2010 | Отправлено: 22:09 29-12-2024 | Исправлено: LZAA, 22:12 29-12-2024
Simple Code

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

Цитата:
После каждого перехода в :TimerRun выполняется SETLOCAL. Это тормоза и чревато превышением максимума вложенных SETLOCAL.

Верно, тоже заметил такое. Мне пора отдохнуть ).
Все сообщения с этим кодом отредактировал.
 
LZAA в л/с отправил сообщение.

Всего записей: 278 | Зарегистр. 19-11-2022 | Отправлено: 22:27 29-12-2024 | Исправлено: Simple Code, 22:36 29-12-2024
LZAA

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

   Я в этом деле ни 'бум-бум', но, может быть это:
 
    https://www.dostips.com/forum/viewtopic.php?t=6079
    https://stackoverflow.com/questions/11916823/batch-limitation-maximum-recursion-while-browsing-menus
 
   может помочь?

Всего записей: 2402 | Зарегистр. 09-01-2010 | Отправлено: 22:29 29-12-2024
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Simple Code
Я бы проверял %%с на непустоту. Ибо формат времени может быть установлен любой.
А зачем четыре токена, вы ведь тремя только пользуетесь?
 
Добавлено:
LZAA

Цитата:
может быть это:
 ...  
может помочь?

Помочь может исправление косяка в алгоритме. Например, такое, как сделал автор.

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

Всего записей: 4201 | Зарегистр. 18-04-2005 | Отправлено: 22:42 29-12-2024
Simple Code

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

Цитата:
А зачем четыре токена, вы ведь тремя только пользуетесь?

Без него к %%с добавляются миллисекунды, четвёртый токен отсекает.

Цитата:
Я бы проверял %%с на непустоту. Ибо формат времени может быть установлен любой.

Хотелось простенький код написать, но видать не судьба ).

Всего записей: 278 | Зарегистр. 19-11-2022 | Отправлено: 23:12 29-12-2024
GCRaistlin



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

Цитата:
четвёртый токен отсекает

Отсекает не токен, а разделитель.

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

Всего записей: 4201 | Зарегистр. 18-04-2005 | Отправлено: 23:16 29-12-2024
Simple Code

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

Всего записей: 278 | Зарегистр. 19-11-2022 | Отправлено: 23:38 29-12-2024 | Исправлено: Simple Code, 00:37 30-12-2024
Roman_Hayretdinov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, как из классической командной строки узнать, какие типы файлов находятся в указанной папке (и её подпапках). Т. е. запускаешь, например, bat-скрипт, и он тебе выводит информацию: в данной папке находятся файлы с расширениями JPG, PNG и GIF

Всего записей: 113 | Зарегистр. 19-12-2021 | Отправлено: 19:29 01-01-2025 | Исправлено: Roman_Hayretdinov, 19:32 01-01-2025
GCRaistlin



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

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

Всего записей: 4201 | Зарегистр. 18-04-2005 | Отправлено: 19:33 01-01-2025
Roman_Hayretdinov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin, уточню: в папке и вложенных папках несколько десятков тысяч файлов. Мне не нужно знать имена файлов и их кол-во - а только типы этих файлов (их расширения). Т. е. нужен скрипт, просто выводящий список этих расширений. Как это сделать при помощи команды DIR, я не осилил

Всего записей: 113 | Зарегистр. 19-12-2021 | Отправлено: 20:25 01-01-2025
Inoz2000



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Roman_Hayretdinov
Яндекс обыкновенный выдаёт скрипт по запросу

Цитата:
cmd список расширений в папке

Код:
@echo off
set target=%~1
if "%target%"=="" set target=%cd%
setlocal EnableDelayedExpansion
set LF=^
 
 
rem Previous two lines deliberately left blank for LF to work.
for /f "tokens=*" %%i in ('dir /b /s /a:-d "%target%"') do (
    set ext=%%~xi
    if "!ext!"=="" set ext=FileWithNoExtension
    echo !extlist! | find "!ext!:" > nul
    if not !ERRORLEVEL! == 0 set extlist=!extlist!!ext!:
)
echo %extlist::=!LF!%
endlocal
секунда делов

Всего записей: 5375 | Зарегистр. 23-04-2009 | Отправлено: 20:51 01-01-2025
GCRaistlin



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

Цитата:
секунда делов

И куча косяков. Например, будет неправильно работать, если в расширениях есть ! или Unicode. Или если сначала попадется файл с расширением txt, а потом - с расширением xt.

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

Всего записей: 4201 | Зарегистр. 18-04-2005 | Отправлено: 22:47 01-01-2025
Inoz2000



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

Всего записей: 5375 | Зарегистр. 23-04-2009 | Отправлено: 22:53 01-01-2025
Jonmey

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

Цитата:
в папке и вложенных папках несколько десятков тысяч файлов. Мне не нужно знать имена файлов и их кол-во - а только типы этих файлов (их расширения). Т. е. нужен скрипт, просто выводящий список этих расширений. Как это сделать при помощи команды DIR, я не осилил

extlist.bat
for folder:
Код:
powershell (dir x:\your_path -file).Extension ^| Sort -Unique

for folder and subfolder
Код:
powershell (dir x:\your_path -file -r).Extension ^| Sort -Unique

 

Всего записей: 1383 | Зарегистр. 17-01-2011 | Отправлено: 22:53 01-01-2025
Roman_Hayretdinov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Inoz2000, спасибо! Мне этот скрипт почему-то не попался - видимо, недолго гуглил, или не тот поисковый запрос ввёл, или Гугл уже не тот
Папку с огромным кол-вом файлов обрабатывал чуть больше часа, а потом выдал ошибку: "Слишком длинная входная строка". Там лежит настолько много файлов с разными расширениями? В любом случае очевидно, что скрипт не всегда срабатывает
 
Jonmey, powershell, к сожалению, не прокатит - скрипт использую в Windows XP

Всего записей: 113 | Зарегистр. 19-12-2021 | Отправлено: 00:02 02-01-2025 | Исправлено: Roman_Hayretdinov, 00:18 02-01-2025
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Roman_Hayretdinov
Можно вывести список расширений файлов во временный файл, затем отсортировать его и вывести во второй, а второй читать и выводить каждое новое расширение в stdout. Но с юникодом в XP ничего не поделаешь.

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

Всего записей: 4201 | Зарегистр. 18-04-2005 | Отправлено: 01:16 02-01-2025 | Исправлено: GCRaistlin, 04:49 02-01-2025
Roman_Hayretdinov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Цитата:
Но с юникодом в XP ничего не поделаешь.

Можно вывод команды DIR передавать по трубе команде FIND "" /V - она автоматически перекодирует юникод в ANSII (так же ведут себя команды MORE, TYPE и FINDSTR)

Всего записей: 113 | Зарегистр. 19-12-2021 | Отправлено: 18:21 02-01-2025
GCRaistlin



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

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

Всего записей: 4201 | Зарегистр. 18-04-2005 | Отправлено: 19:34 02-01-2025
Открыть новую тему     Написать ответ в эту тему

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

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


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru