Имя: Пароль:
1C
 
Как в CMD получить номер архива 1...N по дате
, , ,
0 Гений 1С
 
гуру
08.12.22
20:22
Т.е. какой то универсальный алгоритм, чтобы давал отсаток от деления номера дня от 1 января 2000 года (например) на N
1 Garykom
 
гуру
08.12.22
20:35
2 Гений 1С
 
гуру
08.12.22
20:43
(1) не нашел там похожей темы, спс
3 Сергиус
 
08.12.22
20:53
(0)Почему именно от 1 января 2000 года? какое-то у тебя специфическое требование)
4 Гений 1С
 
гуру
08.12.22
21:10
(3) да мне от любой даты, там в скобках написано же (например)
5 Garykom
 
гуру
08.12.22
21:12
6 Asmody
 
08.12.22
21:21
Я бы посоветовал Powershell, onescript или даже 1С:Исполнитель, но боюсь, не в коня корм
7 Сергиус
 
08.12.22
23:27
(4)Ты бы еще объяснил, для чего это нужно..может и вариантов больше станет)
8 НафНаф
 
09.12.22
07:30
(7) он хочет по номеру дня недели определять номер архива
9 NorthWind
 
09.12.22
07:30
(0) а зачем BAT-то обязательно? Есть же более человеческие языки, ладно пайтон, его ставить надо, но VBS в винде стандартно присутствует с Win98 и до последних версий.
10 NorthWind
 
09.12.22
07:31
или это скрипт под MS-DOS? :)
11 НафНаф
 
09.12.22
07:34
(9) кстати, почему не пайтон? Гений же даже статью написал, как освоил https://habr.com/ru/post/700020/
12 NorthWind
 
09.12.22
08:48
(11) у пайтона все же есть пара минусов, которые в отдельных случаях могут оказаться существенными. Первый - он стандартно не входит в поставку той же винды, его нужно устанавливать. Это не всегда возможно. Второй - пайтон достаточно требователен к современным ОС. Например, на Windows XP удастся поставить только древнюю версию 3.4, которую еще надо найти и под которую уже не поднять некоторые библиотеки. Даже под Win7 совсем свежую версию уже не поставить.
13 NorthWind
 
09.12.22
08:49
Тогда как VBS есть на всем, начиная с Win98 или даже с Win95 OSR2, если мне память не изменяет.
14 arsik
 
гуру
09.12.22
08:57
(13) Сейчас на винде, в основном, повершелом срипты пишут. По современному, удобно, не надо извращаться с обработкой строк, тоже есть в любой винде.
Даже на линукс его завезли :)
15 Fedor-1971
 
09.12.22
09:24
(0) Держи
разделили дату на составляющие:

for /F "TOKENS=1,2,3 DELIMS=." %%a in ('Date /T') do (set day=%%a)&&(set mon=%%b)&&(set year=%%c)

Дальше используем так:
start rar a %hom%\1\nsi%day%-%mon%-%year% -r z:\base.nsi\*.*
16 Fedor-1971
 
09.12.22
09:40
15+ если Date /T возвращает данные с днём, тогда чиним так:
set day=%day:~3,2%   - это если есть ПТ 20.10.2006
set dt=%day%.%mon%.%year:~0,4% - для уверенности, что в год не попали лишние символы
17 НафНаф
 
09.12.22
09:43
(12) а в DOS так вообще горе
18 Fedor-1971
 
09.12.22
09:48
(2) почитай из (1) "Попов А. Командная строка и сценарии Windows"
там описаны математические операции bat файлов типа: Set /A Nom = %%Dat + 1 (или как-то так, точно не помню)
19 Гений 1С
 
гуру
09.12.22
09:49
(15) ты задачу то читал?
условно говоря если N = 5
то мне нужно чтобы каждый день архив нумеровался 1, 2, 3, 4, 5, 1, 2, 3, 4, 5...
20 НафНаф
 
09.12.22
09:49
(18) фиксин? читать? книги? да не, бред какой-то
21 Гений 1С
 
гуру
09.12.22
09:49
(9) потому что скрипт на BAT уже написан и это просто.
22 НафНаф
 
09.12.22
09:50
(19) не смог в остатки от деления?
23 Fedor-1971
 
09.12.22
09:59
(19) Так ты хочешь получить архивы, типа:
ГГГГ-ММ-ДД-1.rar
ГГГГ-ММ-ДД-2.rar
ГГГГ-ММ-ДД-3.rar
ГГГГ-ММ-ДД-4.rar
ГГГГ-ММ-ДД-5.rar

а если их будет больше, то затираем первый?
24 arsik
 
гуру
09.12.22
10:16
(21) Ну так покажи скрипт.
25 Fedor-1971
 
09.12.22
10:25
(19) держи гений,
for /F "TOKENS=1,2,3 DELIMS=." %%a in ('Date /T') do (set day=%%a)&&(set mon=%%b)&&(set year=%%c)
set year=%year:~0,4%
и про буквы названия дня выясни и почисти

IF NOT EXIST c:\NomerInDay.txt Echo 0000 > c:\NomerInDay.txt
FOR %%f IN (c:\NomerInDay.txt) DO set Nom %%f

set /A Nom=%Nom%+1
IF Nom == 5 set Nom=0 - возможно, проверять придётся на 0005

start rar nsi%year%-%mon%-%day%-%Nom% -r z:\base.nsi\*.*

Echo %Nom% > c:\NomerInDay.txt

Надеюсь, отладить справишься
А то всё отнять и поделить, непонятно зачем
26 НафНаф
 
09.12.22
11:29
(25) ждем теперь на хабре статью "Как я делил с остатком в CMD"
27 Fedor-1971
 
09.12.22
11:36
(26) ну, поизвращаться можно, только смысла на понюшку табака
По сути ТС нужен сохраняемый в файл счётчик, для обнуления счётчика просто удаляем файл

Правда, ТС куда-то запропастился, наверно, пробует игрушку прикрутить к задаче
28 Гений 1С
 
гуру
09.12.22
15:04
(25) спасибо за идею, можно вставить такой код
если дата = 1 января тогда 1
если дата = 2 января тогда 2
....
код пролетит быстро.
А сам код сгенерить исходя из N
Удобно, практично... Наверное, самое оптимальное решение.
29 Гений 1С
 
гуру
09.12.22
15:04
(23) да, затираем
30 Гений 1С
 
гуру
09.12.22
15:04
цикличные архивы
31 Гений 1С
 
гуру
09.12.22
15:09
(28) можно даже оптимизировать чутка по методу двоичного деления определяем месяц, потом день внутри него.
32 Fedor-1971
 
09.12.22
15:14
(31) зачем? Придумаем проблему и будем героически её решать?
я же тебе разобрал текущую системную дату на день, месяц, год прямо в bat файле
создавай каталоги по ним + внутри каждой даты присваивай номер архиву
33 Гений 1С
 
гуру
09.12.22
15:22
(32) не понял суть решения, что такое NomerInDay.txt ???
34 Новый1сник2
 
09.12.22
16:15
(0) задача какая ? архивы создавать ?
35 Fedor-1971
 
09.12.22
16:18
(33) Это файл для хранения счётчика номеров архивов за конкретный день
36 Гений 1С
 
гуру
09.12.22
16:18
(34) с добрым утром. Да, нужен цикличный архив на N файлов
37 Гений 1С
 
гуру
09.12.22
16:18
(35) наперкуа? А если он навернется?
38 Fedor-1971
 
09.12.22
16:24
(37) Кто навернётся? файл создаётся при его отсутствии
Блин, тебе нужно создавать нумерованные архивы внутри каждой даты
я тебе нарисовал как сохранить счётчик для архивов внутри дня

Если очень нужно создавай иерархию
2022
  12
     1
     2
     ....
     12

В каждом числе создавай свой счётчик архивов и нумеруй архивы с перзаписью повторяющихся
39 Гений 1С
 
гуру
09.12.22
16:27
(38) мне не надо внутри дня и сохранять не надо. Есть дата, по ней определяется номер ахива. зачем усложнять?
40 Гений 1С
 
гуру
09.12.22
16:29
Вот как это выглядит в 1це:


N = 5;
R = ((НачалоДня(ТекущаяДата()) -  '20010101')/3600/24) % N + 1;
Сообщить(R);

41 Fedor-1971
 
09.12.22
16:31
38+ Создай bat файл и вместо создания архива делай
echo %Nom% > c:\arh+%Nom%.txt

Отладишь создание нужного тебе количества файлов

(40) За одну дату будет один архив?
42 Fedor-1971
 
09.12.22
16:32
(40) на калькуляторе посчитай свою формулу.
У тебя за каждый день будет один архив, зачем тогда разводить огород?
43 Гений 1С
 
гуру
09.12.22
16:37
(42) мне нужен цикличный архив, N архивов в году, а не 365 архивов в году, задача элементарная
44 Гений 1С
 
гуру
09.12.22
16:38
(41) а как %NOM% определять? В этом весь вопрос
45 Fedor-1971
 
09.12.22
16:40
(44) он сохраняется в файле и при каждом последующем запуске bat увеличивается на 1
ты (25) пробовал сделать? Очень похоже, что нет
46 Гений 1С
 
гуру
09.12.22
16:44
(45) а на хрена? Если запустится дважды за один день, то будет лажа.
Решение малой кровью:
set /A i=11%5
Где вместо 11 надо подставить число месяца 1-30, в принципе кроме перехода из месяца в месяц будет корректно работать.
47 Fedor-1971
 
09.12.22
16:47
(46) чем не устраивает структура каталогов нужной глубины? Это совсем без крови
Архив
1
2
3
4
5

сначала чистим 5 через del 5\*.*
потом move 4\*.* 5\ и так до 1 в 2
создаём в 1 новый архив
48 Fedor-1971
 
09.12.22
16:50
47 Если ты запустишь два раза своё решение, ты тупо уделаешь текущий архив, что хуже, чем 2 штуки за один день
49 bolobol
 
09.12.22
16:56
(47) Самое толковое решение. Всегда понятно прям по имени - какой последний
50 Гений 1С
 
гуру
09.12.22
16:59
(47) (49) при запуске несколько раз за день нарушается цикличность. Мне такое претит
51 Fedor-1971
 
09.12.22
17:02
(49) Это каталоги, а в них может быть несколько архивов с разными наименованиями
С датой создания и с уникальным номером архива - если очень нужно

Одно неудобство - нужно заходить в каталог

(50) корче, тебе дали две удочки - лови рыбу. Сам выбери что тебе нужнее
52 Гений 1С
 
гуру
09.12.22
17:04
(51) да я в принципе нашел решение малой кровью в (46), спасибо за на-водки.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс