Создание папки вида: дата+время

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Код: Выделить всё

@echo off &setlocal enableextensions

set "Folder=%%Year%%\TEST-%%N\Example_%%M"
set /a cntN=70
set /a cntM=2

call :Year
for /l %%N in (1,1,%cntN%) do (
	for /l %%M in (1,1,%cntM%) do (
		call 2>nul md "%Folder%"
	)
)
goto :eof

:Year
::	date DD.MM.YY
for /f "tokens=3 delims=-/." %%y in ("%date%") do set /a Year=20%%y
if %Year% GTR 200000 set /a Year=Year-200000
goto :eof
сохрани как .cmd
Последний раз редактировалось Tol!k Ср ноя 27, 2013 22:44, всего редактировалось 1 раз.
Аватара пользователя
DiverNirvana
Сообщения: 5
Зарегистрирован: Ср ноя 27, 2013 17:04
Откуда: Ireland

Сообщение DiverNirvana »

Огромное спасибо Tol!k.

Необходимые 70 папок и что самое главное 2 вложенных в каждую из них, исправно создаются в корне диска с которого был запущен *cmd.
Пока не получилось , научить скрипт создавать рядом с собой папку с датой и уже в ней создавать все остальное (хотя вроде в самом скрипте все для этого есть).
--------------------
Пытаюсь получить что-то вроде этого (Не могу прилепить изображение, было бы нагляднее).
2013\
|__TEST-01\
| |____Example_1
| |____Example_2
|__TEST-02\
| |____Example_1
| |____Example_2
|__TEST-03\
| |____Example_1
| |____Example_2
|
|
--------------------
и ни как не соображу где изменить вид нумерации на двухзначный,
типа не 1 а 01.
--------------------
В любом случае - спасибо большое. (сам, я бы не скоро до этого допер :oops: )
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

DiverNirvana писал(а):создавать рядом с собой
обновил код

Добавлено спустя 29 минут:
изменить вид нумерации на двухзначный

Код: Выделить всё

@echo off &setlocal enableextensions

set "Folder=%%Year%%\TEST-%%N%%\Example_%%M%%"
set /a cntN=70
set /a cntM=2

call :Year
for /l %%n in (1,1,%cntN%) do (
	set /a N=100%%n &call set N=%%N:~-2%%
	for /l %%m in (1,1,%cntM%) do (
		set /a M=100%%m &call set M=%%M:~-2%%
		call 2>nul md "%Folder%"
	)
)
goto :eof

:Year
::	date DD.MM.YY
for /f "tokens=3 delims=-/." %%y in ("%date%") do set /a Year=20%%y
if %Year% GTR 200000 set /a Year=Year-200000
goto :eof
Последний раз редактировалось Tol!k Ср ноя 27, 2013 23:14, всего редактировалось 1 раз.
Аватара пользователя
DiverNirvana
Сообщения: 5
Зарегистрирован: Ср ноя 27, 2013 17:04
Откуда: Ireland

Сообщение DiverNirvana »

Tol!k писал(а):обновил код
Спасибо огромное - все работает как часики. :D :D :D
(блин... как я завидую вашим знаниям.... :oops: )

пойду грызть гранит науки на ss64.com, русских пока не нашел.
Еще раз - тысяча благодарностей.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

русских пока не нашел
русских форумов? на осзоне есть, на ру-борде 2 темы

http://forum.oszone.net/forum-102.html
http://forum.ru-board.com/topic.cgi?for ... ic=33080#1
Последний раз редактировалось Tol!k Пт ноя 29, 2013 01:22, всего редактировалось 1 раз.
Аватара пользователя
DiverNirvana
Сообщения: 5
Зарегистрирован: Ср ноя 27, 2013 17:04
Откуда: Ireland

Сообщение DiverNirvana »

До ру-борда добрался, осзон пока неосилил.....
Читаю все что на глаза попадается... уже нифига не соображаю....
глаза болят, спина болит..... Спасибо за наводку.
Tol!k, не сочтите за наглость,
а как бы выглядел созданный вами скрипт, еслибы имена конечных 2-ух папок должны были быть разными:
типа не Example_01 (и.т.д) а скажем Morning и Evening (к примеру)?
Всетаки, я полный ноль в скриптописании и чем больше читаю, тем меньше соображаю :oops:

Спасибо еще раз за вашу помощь.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Morning и Evening без цифр?

Код: Выделить всё

@echo off &setlocal enableextensions

set "Folder=%%Year%%\TEST-%%N%%\%%Name%%"
set /a cntN=70
set "Names=Morning;Evening;Blah Blah Blah"

call :Year
for /l %%n in (1,1,%cntN%) do (
	set /a N=100%%n &call set N=%%N:~-2%%
	call :Name "%Names%"
	)
)
goto :eof

:Name
for /f "tokens=1,* delims=;" %%a in ("%~1") do (
	set "Name=%%~a"
	call 2>nul md "%Folder%"
	if not "%%~b"=="" call :Name "%%b"
)
goto :eof

:Year	::	date DD.MM.YY
for /f "tokens=3 delims=-/." %%y in ("%date%") do set /a Year=20%%y
if %Year% GTR 200000 set /a Year=Year-200000
goto :eof
Аватара пользователя
DiverNirvana
Сообщения: 5
Зарегистрирован: Ср ноя 27, 2013 17:04
Откуда: Ireland

Сообщение DiverNirvana »

Tol!k писал(а):Morning и Evening без цифр?
Да, точно так как вы сделали - Спасибо огромное. :D
С нумерованными одноименными коталогами вроде (только вроде :oops: ) понял а вот с разными именами.... я сколько не пытался, так ничего и не добился....
Видать не с того конца я взялся за изучение.... ни синтаксиса не понимаю, ни констант не знаю, ничего в общем, толком не знаю, все гораздо сложней чем представляется со стороны.

Большое спасибо за вашу помощь.
Nick
Сообщения: 107
Зарегистрирован: Пт дек 26, 2014 17:11

Сообщение Nick »

Как можно сделать, чтобы в конце текущей папки с датой, если она уже существует, то добавлялось бы, например __2, __3 и т.д.?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Nick
Сообщения: 107
Зарегистрирован: Пт дек 26, 2014 17:11

Сообщение Nick »

Flasher
Ну, если через скрипт делать, то м.б. так:
Формат даты yyyy_MM_dd (такой формат более удобен для сортировки файлов и папок).
Системнй формат времени dd.MM.yyyy, поэтому в строке 23

Код: Выделить всё

Left(D, 5)
"Left(D, 5)" выводится сначала день, потом месяц. А месяц находится посередине, обрезкой даты это не сделать.
И тогда, лучше бы так:
Есть, например папка Firefox_2015_01_10 (м.б. и Firefox_2015_01_10_v5). Встав на эту папку, а потом запустив скрипт хотелось бы, чтобы получилось Firefox_2015_01_18, а далее Firefox_2015_01_18__v2 и т.д. Но, названия - разные, т.е. мб. "Opera_blink_2015_01_10_v3" и т.п.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Про формат согласен только в части очерёдности, поправил.
Nick писал(а):И тогда, лучше бы так
Это чем же лучше, если точки дают очевидный формат? Знаки подчёркивания не воспринимаются. Если очень надо, то в 24 строке точки на них легко меняются. Переписывать скрипт под число в конце имени не вижу смысла, т.к. там совсем другой подход будет, придётся с конца строки поочерёдно проверку делать на предмет цифры. Мне не нравится этот путь. И тут речь идёт о создании папок с нуля, а не относительно имён выбранных.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Nick
Сообщения: 107
Зарегистрирован: Пт дек 26, 2014 17:11

Сообщение Nick »

Flasher писал(а):придётся с конца строки поочерёдно проверку делать на предмет цифры.
Так ведь, наверно, можно как-то использовать регулярное выражение вида:

Код: Выделить всё

\d{4}_\d{2}_\d{2}
Оно сразу найдет дату. Иначе получается не информативно (все папки имеют название NewFolder и дата). А так часть названия бралась бы из папки под курсором.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Нет, это не годится.
1) Наличие даты - это опция.
2) Это выражение не поможет с вариантом, где, например, на конце "_bla93.285bla732.84.690".
3) Я не хочу отказываться от более быстрой маски.
4) См. посл. предложение предыдущего поста и вторую ссылку. Я зря время тратил на новый скрипт?
Неинформативность в чём заключается? Название файла/папки можно задавать любое.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Nick
Сообщения: 107
Зарегистрирован: Пт дек 26, 2014 17:11

Сообщение Nick »

Параметры: "%P" 1 1 1
Не получается создание папки после v1. Т.е. создаются папки вида: "Новая папка__2015_01_22__v1, а дальше ошибка. Где нужно правильно исправить?
---------------------------
Строка: 56
Символ: 18
Ошибка: Файл уже существует
---------------------------
Сложно ли изменить так, чтобы название бралось из папки (или файла) под курсором, т.е. например, до первого символа "__" слева. Тогда получилось бы так: Новая папка (имя под курсором), а дальше подставляется текущая дата (если уже есть такая папка, то дальше по счетчику)?
Последний раз редактировалось Nick Пт янв 23, 2015 16:38, всего редактировалось 1 раз.
Ответить