Войти

Показать полную графическую версию : [решено] батник для создания папки с текущей датой + время


Страниц : [1] 2

aggressor_
20-01-2011, 15:46
Добрый день, мне необходим bat файл, чтобы при его выполнении создавалась папка с текущей датой + время.
Напр: 20.01.2011 (15:43:17)
команда: MD %date:~-10% создаёт только с датой.
Пожалуйста, помогите решить данную проблему.

Ivan Bardeen
20-01-2011, 16:02
В названии папки не допускается символ ":" - а именно этот символ присутствует в выводе содержимого переменной %time%
вот вам скрипт vbs - папку c:\temp можете поменять на любую другую


On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_LocalTime")

For Each objItem In colItems
nowday = objItem.Day
nowhour = objItem.Hour
nowminute = objItem.Minute
nowmonts = objItem.Month
nowsecond = objItem.Second
nowyear = objItem.Year
Next

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.CreateFolder("c:\temp\" & nowyear & nowmonts & nowday & nowhour & nowminute & nowsecond )

Iska
20-01-2011, 16:02
А что, файловая система с каких-то пор стала допускать наличие «:» в имени (http://msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx#naming_conventions)?
set sFolderName=%date% (%time:~0,-3%)
md "%sFolderName::=-%"

aggressor_
20-01-2011, 16:16
Ivan Bardeen, Iska, Большое спасибо.
Вариант Iska мне больше подходит.

aggressor_
20-01-2011, 16:36
Можно ли данный батник в контекстное меню вставить, чтобы выполнялся в любом месте, а не только где расположен?

Ivan Bardeen
20-01-2011, 16:36
Можно ли данный батник в контекстное меню вставить, чтобы выполнялся в любом месте, а не только где расположен? »
киньте его в папку windows

aggressor_
20-01-2011, 17:13
Да, но хотелось бы вот так:
http://s1.ipicture.ru/uploads/20110120/QuMpmweu.jpg

OSArev
22-01-2011, 02:20
Да, но хотелось бы вот так: »

Можно прописать в реестр.


Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\shell\Создать папку с текущей датой]
"icon"="C:\\Program Files\\Add_to_roll\\Folder_since_date.exe"
[HKEY_CLASSES_ROOT\Directory\Background\shell\Создать папку с текущей датой\command]
@="C:\\Program Files\\Add_to_roll\\Folder_since_date.exe"


Подправь для своих потребностей...

aggressor_
22-01-2011, 14:19
OSArev,
какой параметр нужно создать?

как я понял тут создать свой раздел и в этом разделе создать раздел command
HKEY_CLASSES_ROOT\Directory\Background\shell\мой раздел\command

просто у меня ещё есть такое
HKEY_CLASSES_ROOT\Directory\Background\shell\ContextMenuHandlers

OSArev
23-01-2011, 00:50
какой параметр нужно создать? »
Ну, да...
HKEY_CLASSES_ROOT\Directory\Background\shell\мой раздел\command »
В "command" прописуешь путь к батнику, и всё....На Рабочем столе и на пустых местах папки в контекстном меню появится твоя команда. Можно, не только папки создавать, но и много другого.
Но...
Некоторым командам, иной раз требуется дополнительные параметры. Как правило это "%1" или "%V",
дописываются после пути к батнику или после команды через пробел.
Так же можно создать команды контекстного меню для файлов и папок.
Для всех файлов: HKEY_CLASSES_ROOT\AllFilesystemObjects\shell или HKEY_CLASSES_ROOT\*\shell
Для папок: HKEY_CLASSES_ROOT\Folder\shell
Извини, если, ты уже это знаешь.Может ещё кому пригодится....

PS: А, вообще про реестр - здесь, наверное не по теме.

aggressor_
23-01-2011, 01:22
Нет, моя команда как была только при нажатии на папку, так и осталась там. На Рабочем столе и на пустых местах папки в контекстном меню не появилась.
У меня XP, раздела shell в Background нету...поэтому делал всё в:
HKEY_CLASSES_ROOT\Directory\shell\ITEMFOLDER

OSArev
23-01-2011, 03:28
Нет, моя команда как была только при нажатии на папку, так и осталась там. На Рабочем столе и на пустых местах папки в контекстном меню не появилась.
У меня XP, раздела shell в Background нету...поэтому делал всё в: »
Раздел,"shell в Background" там как раз, то и есть(должен быть во всяком случае), но...
Я начинаю забывать добрую, проверенную ХР. Оказывается там такой вариант не прокатывает.Я тут "погуглил"немного,(кстати, а тебе ,что лень?), и нашел, сразу в первой строке:
http://tuning-xp.ucoz.ru/index/0-21
Полистай, если сильно требуется, а вообще я раньше пользовался какой-то прогой(не помню названия), так в ней предлагаются не только прописанные пункты, но и возможность добавления(неограниченнного) своих комманд.Т.е.Прописал команду, например:
mkdir %date% %time:~0,-3%
Желаю успехов.Если пойдёш путём редактирования "Shell32.dll", дай знать - интересно, как у тебя получится.

shao
26-01-2011, 09:47
set sFolderName=%date% (%time:~0,-3%)
md "%sFolderName::=-%" »

А можно поподробнее, как это работает ?
Начиная с (%time:~0,-3%) ?
Спасибо !

Iska
26-01-2011, 10:57
%time:~0,-3%
— убираем сотые доли секунд.
%sFolderName::=-%
— меняем в строке, содержащейся в переменной окружения «sFolderName» символ «:» (недопустимый в именах файловой системы) на «-»:
%<имя переменной окружения>:<что меняем>=<на что меняем>%

caustic
22-04-2011, 12:19
Добрый день, помогите пожалуйста правильно внедрить переменную %date% в листинг моего батника:

for /f "tokens=*" %%i in (fullname.txt) do ( rename "cigi_PMI\%%i" )

т.е. в результате нужно чтобы создалась папка с именем"cigi_PMI [текущая дата]"

amel27
22-04-2011, 12:30
чтобы создалась папка с именем"cigi_PMI [текущая дата]" »
MD "cigi_PMI [%DATE%]"

не понятна связь с кодом приведенного батника... батник перебирает содержимое файла fullname.txt (что в этом файле?) и что-то должен с этими строками сделать (что?), команда RENAME для своей работы требует два параметра, а не один

caustic
22-04-2011, 12:59
echo off > cigi.txt
dir cigi /b >> cigi.txt

@echo off>img.txt
dir img /b >>img.txt

cscript doit.vbs cigi.txt img.txt fullname.txt
for /f "tokens=*" %%i in (fullname.txt) do ( rename "cigi_PMI\%%i" )

Del cigi.txt img.txt fullname.txt

в общих чертах: батник создает txt-списки файлов из двух разных папок, и с помощью скрпипта объединяет их в один fullname.txt. откуда берет построчно новые имена и переименовывает файлы из папки cigi копируя их во вновь созданную папку cigi_PMI.

кстати, переменную %DATE% внедрить не получилось т.к. папку cigi_PMI создает скрипт doit.vbs. а если в нем подправить листинг и сделать так, чтобы папка создавалась с текущей датой (к примеру cigi_PMI [22.04.11])
то возможно ли каким то образом научить батник находить эту папку (у которой название будет меняться по крайней мере раз в день :) )и уже работать с ней на этапе:
for /f "tokens=*" %%i in (fullname.txt) do ( rename "cigi_PMI\%%i" )
?

irshat
21-04-2015, 23:56
Здравствуйте, а есть возможность сделать так, чтоб батник каждый день создавал, папки в таком варианте C:\Ftp\smtp\2015\04\20
т.е с каждым месяцем, на месяц новую папку и с каждым днем, так же на каждый день новую папку

Georgio
22-04-2015, 02:18
irshat, выбирайте:

@ 2>nul md "C:\Ftp\smtp\%date:~6,4%\%date:~3,2%\%date:~,2%";
@ 2>nul md "C:\Ftp\smtp\%date:~-4%\%date:~-7,2%\%date:~-10,2%";
@for /f "tokens=1-3 delims=.-/" %%i in ("%date%") do @ 2>nul md "C:\Ftp\smtp\%%k\%%j\%%i";
@for /f "tokens=1-3 delims=.-/ " %%i in ('date/t') do @ 2>nul md "C:\Ftp\smtp\%%k\%%j\%%i".
Обратите внимание на разницу в написании третьего и четвёртого вариантов: в последнем в перечень возможных разделителей добавляется ещё и пробел, так как вывод команды "date/t" в отличие от строки "%date%" оканчивается на пробел.



В PowerShell ещё проще:New-Item ('C:\Ftp\smtp\'+(Get-Date -format 'yyyy\\MM\\dd')) -ItemType 'Directory' -Force,
только нельзя забывать, что буквы "M" должны быть в верхнем регистре, а буквы "y" и "d" -- в нижнем.

irshat
22-04-2015, 05:32
Цитата Georgio:
@ 2>nul md "C:\Ftp\smtp\%date:~6,4%\%date:~3,2%\%date:~,2%" »
от души, как раз то что надо
и как сам не догадался, вроде об этих командах и так знал




© OSzone.net 2001-2012