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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии: bat, cmd
И все с этим связанное... (Часть 7)

Модерирует : 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

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

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

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

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

Всего записей: 3689 | Зарегистр. 29-03-2016 | Отправлено: 09:40 06-12-2025 | Исправлено: bomzz, 09:41 06-12-2025
Franshizza

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzz
CMD не работает в Unicode. Надо перевести CMD в UTF-8 и ПРАВИЛЬНО вывести русский текст.
Добавь в начало батника:
 
@echo off
chcp 65001 >nul
 
И замени русские строки вот так:
 
echo Исходные дата и время:
echo Итоговое время:

Всего записей: 18 | Зарегистр. 28-11-2025 | Отправлено: 09:46 06-12-2025
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Franshizza
у меня батник в 1251
 
   
 
http://bomz.vastserve.com/files/
загрузи сам батник мне на сайт upload, в зипе, bat хостинг не допускает

Всего записей: 3689 | Зарегистр. 29-03-2016 | Отправлено: 09:47 06-12-2025 | Исправлено: bomzz, 09:57 06-12-2025
Franshizza

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzz
М-да. Без двух-трёх рюмочек я сегодня недогоняшка. После обеда разберусь.

Всего записей: 18 | Зарегистр. 28-11-2025 | Отправлено: 09:57 06-12-2025
bomzz

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

Всего записей: 3689 | Зарегистр. 29-03-2016 | Отправлено: 09:58 06-12-2025 | Исправлено: bomzz, 10:14 06-12-2025
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Franshizza
or /f "tokens=1-4 delims=:." %%a in ("%TIME%") do (  
надо еще пробел делитель, в каких то случаях пробел выскакивает то ли вместо запятой то ли двоеточия

Всего записей: 3689 | Зарегистр. 29-03-2016 | Отправлено: 13:58 06-12-2025
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzz
Разделитель может быть вообще любым: его можно определить вручную. Например, в цифру.
Если у числа ведущий ноль, то оно считается заданным в восьмеричной системе. 07+2=11. "08+1" даст ошибку.

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

Всего записей: 4482 | Зарегистр. 18-04-2005 | Отправлено: 14:11 06-12-2025 | Исправлено: GCRaistlin, 14:20 06-12-2025
Franshizza

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

Всего записей: 18 | Зарегистр. 28-11-2025 | Отправлено: 14:28 06-12-2025 | Исправлено: Franshizza, 14:50 06-12-2025
bomzz

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

Цитата:
Формат времени в Windows настраивается через Региональные настройки, где можно выбрать стандартные форматы (12-часовой, 24-часовой, с секундами или без) или задать свой собственный, используя символы, такие как HH (часы в 24-часовом формате) или h (часы в 12-часовом), mm (минуты), ss (секунды), а также tt для AM/PM, через Параметры > Время и язык > Регион или Панель управления > Часы, язык и регион > Регион.  

надо было свою утилиту делать для вывода времени
   
хостинги картинок не работают
 
мой вроде работает, переделал - убрал вложенные циклы тоже, это позволяет увеличивать не только минуты но и остальные параметры
Подробнее...
 
если сделать подпрограммами тогда можно увеличивать переменные без ограничений, например на 60 дней, или 100 часов

Всего записей: 3689 | Зарегистр. 29-03-2016 | Отправлено: 15:42 06-12-2025 | Исправлено: bomzz, 17:34 06-12-2025
Franshizza

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

Всего записей: 18 | Зарегистр. 28-11-2025 | Отправлено: 17:43 06-12-2025
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Franshizza
set /a "LEAPYEAR=%_year% %% 4"
а вот это что такое? что то с кодировкой?
испорченный телефон получается

Всего записей: 3689 | Зарегистр. 29-03-2016 | Отправлено: 17:47 06-12-2025 | Исправлено: bomzz, 17:49 06-12-2025
Franshizza

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzz
Это означает:
«Вычислить остаток от деления _year на 4
и сохранить результат в переменную LEAPYEAR»
И это используется для определения високосного года.
В арифметике всегда пишут %%:
n %% 2     — проверка чётности
year %% 4  — проверка високосности

Всего записей: 18 | Зарегистр. 28-11-2025 | Отправлено: 18:01 06-12-2025
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
rem ======== day overflow (31-day months first) ========
if %_day% GTR 31 (
    set /a "_day-=31"
    set /a "_day+=1"
)
pause
вот тут ошибка, в чем в упор не вижу. перепечатал все вручную
понятно в чем. дни неправильно задались
 
что то полезное узнал, про остаток
 
а вот это как работает?
for /f "tokens=2" %%A in ("%DATE%") do set d=%%A

Всего записей: 3689 | Зарегистр. 29-03-2016 | Отправлено: 18:02 06-12-2025 | Исправлено: bomzz, 18:06 06-12-2025
Franshizza

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzz
Запусти отладочную и опубликуй блоки:
RAW DATE/TIME
PARSED VALUES
AFTER ADD 2 MINUTES
 
Добавлено:
bomzz

Цитата:
rem ======== day overflow (31-day months first) ========
if %_day% GTR 31 (
    set /a "_day-=31"
    set /a "_day+=1"
)
pause

 
Проблема не в арифметике
Ошибка возникает из-за парсинга строки if %_day% GTR 31 (
В переменной _day на момент выполнения, почти наверняка, пусто или она содержит пробел/некорректный символ. Предполагаю.

Всего записей: 18 | Зарегистр. 28-11-2025 | Отправлено: 18:06 06-12-2025
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Franshizza
Это в юлианском календаре так високосный год считается. В григорианском еще надо, чтобы он, если делится на 100, делился и на 400.
 

Код:
 
rem Команда, устанавливающая errorlevel в 1 и возвращающая 0 (не выполнится
rem то, что идет после || за ней).
rem Usage on levels 1 and 2:
rem %_er'%
rem Usage on levels 2 and deeper:
rem %_er':^=^^^%
set "_er'=((for /f %%# in ()do y)^|^| if 1==2 y)
 
rem _IsLeapYear
rem v2025-05-17_1
rem Возвращает 1, если <year> является високосным годом, иначе 0.
rem Exit codes: 0  <year> is not a leap-year.
rem             1  <year> is a leap-year.
rem Usage on level 1:
rem (for /f %%# in ("<year>") do %_IsLeapYear%)
rem Usage on level 2 and deeper:
rem (for /f %%# in ("<year>") do %_IsLeapYear:^=^^^%)
set _IsLeapYear=((2^^^> nul set /a 1/(%%#%%400^^^))^^^&^^^& ((2^^^> nul set /a 1/(%%#%%4^^^))^^^|^^^| (((2^^^> nul set /a 1/(%%#%%100^^^))^^^|^^^| %_er':^=^^^%)^^^&^^^& if errorlevel 1 (set/a0)else call)))
 
(for /f %%# in ("1900") do %_IsLeapYear%) && echo Not a leap year || echo Leap year
(for /f %%# in ("2000") do %_IsLeapYear%) && echo Not a leap year || echo Leap year
(for /f %%# in ("2004") do %_IsLeapYear%) && echo Not a leap year || echo Leap year
 


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

Всего записей: 4482 | Зарегистр. 18-04-2005 | Отправлено: 18:15 06-12-2025
Franshizza

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
Сойдёт и так
 
Добавлено:
bomzz

Цитата:
if %_day% GTR 31 (

А-а-а, сто чертей мне в глотку.
 Ставь кавычки:
if "%_day%" GTR "31" (

Всего записей: 18 | Зарегистр. 28-11-2025 | Отправлено: 18:18 06-12-2025
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Franshizza
всюду кавычек наставил доходит до конца
   
где проблема понятно, но я не знаю как эта конструкция for работает
for /f "tokens=2" %%A in ("%DATE%") do set d=%%A
Подробнее...
 

Всего записей: 3689 | Зарегистр. 29-03-2016 | Отправлено: 23:24 06-12-2025 | Исправлено: bomzz, 23:35 06-12-2025
Franshizza

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

Цитата:
где проблема понятно, но я не знаю как эта конструкция for работает
for /f "tokens=2" %%A in ("%DATE%") do set d=%%A

 
Поменяй формат даты (2-й токен):
Wed 12/04/2025
Tue 09/17/2024
Mon 1/3/2023

Всего записей: 18 | Зарегистр. 28-11-2025 | Отправлено: 23:56 06-12-2025 | Исправлено: Franshizza, 23:57 06-12-2025
bomzz

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

Всего записей: 3689 | Зарегистр. 29-03-2016 | Отправлено: 00:01 07-12-2025 | Исправлено: bomzz, 00:58 07-12-2025
Franshizza

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну раз заработало - пользуйся.

Всего записей: 18 | Зарегистр. 28-11-2025 | Отправлено: 00:57 07-12-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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

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


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

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

LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

Рейтинг.ru