Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/34: Рейтинг темы: голосов - 34, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 2

Имя папки с названием месяца вчерашнего дня

03.06.2014, 06:50. Показов 7102. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здрасьте.
Суть такова: есть архиватор БД, который умеет архивировать данные за завершённые сутки в определённую папку.
Есть задание: сделать так, чтобы каждый день он архивировал в "d:/backup/xxxx/yyyy", где xxxx - год, а yyyy - месяц прописью (то бишь январь, февраль и т.д.).

Немного погуглив, я сделал вот что:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Echo Off
 
Call :GetVar Year
Call :GetVar Month
CHCP 1251 > nul
For /F "Tokens=%$Month%" %%i In ("Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь") Do Set $MonthName=%%i
CHCP 866 > nul
 
MD D:\Backup\%$Year%\%$MonthName%
::Команда архивировать данные в нужный мне каталог
DBackUpM.exe y -Cd:\backup\%$Year%\%$MonthName%
 
:GetVar
For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get %1') Do Set $%1=%%i
GoTo :EOF
Засунув это дело в планировщик, я успокоился. Первый день лета подкрался незаметно - данные за прошедшие сутки, т.е. за 31 мая, сохранились в папку текущего месяца - в Июнь.
В общем, нужно всё как-то реализовать, при этом учитывая первые числа месяца (блин, а ещё ведь 1 января есть!). Как это сделать? Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.06.2014, 06:50
Ответы с готовыми решениями:

Вычислять дату вчерашнего дня
Добрый день. Есть большой объем логов, которые пишутся с именами в формате 20130724.log Очень хочется копировать логи с датой за...

Проверка наличия файлов для каждого дня месяца и копирование недостающих
Добрый день, есть такая ситуация,в папках содержаться архивы формата 2015-01-01-имя.7z, так нужно написать батник который проверяет есть ли...

Что делать, если значение сегодняшнего дня(месяца) меньше значения дня(месяца) введных пользователем?
#include <iostream> #include <ctime> using namespace std; int main() { time_t t = time(NULL); // äëÿ âû÷èñëåíèÿ...

8
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
03.06.2014, 09:49
Лучший ответ Сообщение было отмечено Dragokas как решение

Решение

вычисление даты от текущей ±n дней - надо только допилить название месяца. Новый м-ц или новый год эту ф-цию не волнуют.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
03.06.2014, 12:50
Лучший ответ Сообщение было отмечено Lazy Tima как решение

Решение

https://www.cyberforum.ru/post1953099.html
0
0 / 0 / 0
Регистрация: 02.06.2014
Сообщений: 2
04.06.2014, 09:34  [ТС]
Ух, Dragokas, спасибо. Теперь всё как надо.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off
 
if %date:~,2%==01 (call :FromNow -1) else (call :FromNow)
chcp 1251 > nul
for /f "tokens=%mm%" %%i in ("Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь") do set month=%%i
chcp 866 > nul
 
md d:\Backup\%year%\%month%
 
:FromNow
setLocal
set now=%date%
set /a yyyy=%now:~-4%
set /a mm=1%now:~3,2%-100
set /a dd=1%now:~,2%-100
set /a JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
set /a L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
set /a L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
set /a J=J+2-12*L,I=100*(N-49)+I+L
set /a yyyy=I,mm=100+J,dd=100+K
endLocal&set year=%yyyy%&set mm=%mm:~-2%&set day=%dd:~-2%
0
0 / 0 / 0
Регистрация: 03.08.2015
Сообщений: 3
03.08.2015, 15:24
с определением месяца прописью, наступил Август и все сломалось :-)
теперь кмд выдает при определении месяца, если его вывести через echo
═хяЁхфтшфхээюх яю*тыхэшх: 8".

Добавлено через 12 минут
так себя ведут два месяца 08 и 09 все остальные отрабатывают как надо

Добавлено через 59 минут
непредвиденное появление 8"
0
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
03.08.2015, 16:10
Цитата Сообщение от wowagsm2 Посмотреть сообщение
с определением месяца прописью, наступил Август и все сломалось :-)
Цитата Сообщение от wowagsm2 Посмотреть сообщение
так себя ведут два месяца 08 и 09 все остальные отрабатывают как надо



Перед пятой строкой в коде впишите строку
Windows Batch file
for /f "tokens=* delims=0" %%i in ("%mm%") do set mm=%%i
,
и все месяцы будут определяться.



Таким образом, начало кода будет выглядеть так:

Windows Batch file
1
2
3
4
5
6
7
@echo off
 
if %date:~,2%==01 (call :FromNow -1) else (call :FromNow)
chcp 1251 > nul
for /f "tokens=* delims=0" %%i in ("%mm%") do set mm=%%i
for /f "tokens=%mm%" %%i in ("Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь") do set month=%%i
chcp 866 > nul
.
1
0 / 0 / 0
Регистрация: 03.08.2015
Сообщений: 3
03.08.2015, 19:59
ну тут понятна логика что for начнет в строке %mm% искать разделитель 0. Но хотелось бы понять в чем проблема, чем так отличается значение 08 и 09 например от 07.
За предложенный вариант плюсую, спасибо :-).
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
03.08.2015, 20:12
Формат 0X, т.е. от 00 ... до 07 - в представлении интерпретатора - 8-ричная система счисления. Иначе говоря - древний костыль.
Следовательно 08, 09 - это некорректные числа.
2
0 / 0 / 0
Регистрация: 03.08.2015
Сообщений: 3
03.08.2015, 20:36
ох ё, вот так да, спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.08.2015, 20:36
Помогаю со студенческими работами здесь

со вчерашнего дня не могу запустить ноутбук (
во время проверки системы при включении ( когда идет отсчет до 10 сек. и потом проверяются тома) один не хороший человек не дождался...

Со вчерашнего дня часто no boot device
Здравствуйте, недавно почистил компьютер, и стал виснуть видовс перезагружал компьютер и показывает no boot device. Два кабеля от SSD...

Как получить число вчерашнего дня?
Подскажите, пожалуйста, самый простой способ.

Со вчерашнего дня svchosts стал есть 50% CPU
Со вчерашнего дня svchosts стал есть 50% CPU. Открыл диспетчер задач, там виден этот svchost, когда нажимаешь галочку "отображать...

Разработать процедуру, определяющую дату вчерашнего дня
Разработать процедуру, определяющую дату вчерашнего дня.Чтобы при вводе получилось из 01 01 2000-31 12 1999


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru