Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] батник для создания папки с текущей датой + время (http://forum.oszone.net/showthread.php?t=197147)

aggressor_ 20-01-2011 15:46 1593149

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

Ivan Bardeen 20-01-2011 16:02 1593171

В названии папки не допускается символ ":" - а именно этот символ присутствует в выводе содержимого переменной %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 1593172

А что, файловая система с каких-то пор стала допускать наличие «:» в имени?
Код:

set sFolderName=%date% (%time:~0,-3%)
md "%sFolderName::=-%"


aggressor_ 20-01-2011 16:16 1593183

Ivan Bardeen, Iska, Большое спасибо.
Вариант Iska мне больше подходит.

aggressor_ 20-01-2011 16:36 1593201

Можно ли данный батник в контекстное меню вставить, чтобы выполнялся в любом месте, а не только где расположен?

Ivan Bardeen 20-01-2011 16:36 1593203

Цитата:

Цитата aggressor_
Можно ли данный батник в контекстное меню вставить, чтобы выполнялся в любом месте, а не только где расположен? »

киньте его в папку windows

aggressor_ 20-01-2011 17:13 1593229

Да, но хотелось бы вот так:

OSArev 22-01-2011 02:20 1594450

Цитата:

Цитата aggressor_
Да, но хотелось бы вот так: »

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

Код:

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 1594648

OSArev,
какой параметр нужно создать?

как я понял тут создать свой раздел и в этом разделе создать раздел command
Код:

HKEY_CLASSES_ROOT\Directory\Background\shell\мой раздел\command
просто у меня ещё есть такое
Код:

HKEY_CLASSES_ROOT\Directory\Background\shell\ContextMenuHandlers

OSArev 23-01-2011 00:50 1595021

Цитата:

Цитата aggressor_
какой параметр нужно создать? »

Ну, да...
Цитата:

Цитата aggressor_
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 1595035

Нет, моя команда как была только при нажатии на папку, так и осталась там. На Рабочем столе и на пустых местах папки в контекстном меню не появилась.
У меня XP, раздела shell в Background нету...поэтому делал всё в:
Код:

HKEY_CLASSES_ROOT\Directory\shell\ITEMFOLDER

OSArev 23-01-2011 03:28 1595125

Цитата:

Цитата aggressor_
Нет, моя команда как была только при нажатии на папку, так и осталась там. На Рабочем столе и на пустых местах папки в контекстном меню не появилась.
У меня 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 1597441

Цитата:

Цитата Iska
Код:

set sFolderName=%date% (%time:~0,-3%)
md "%sFolderName::=-%"

»

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

Iska 26-01-2011 10:57 1597470

Код:

%time:~0,-3%
— убираем сотые доли секунд.
Код:

%sFolderName::=-%
— меняем в строке, содержащейся в переменной окружения «sFolderName» символ «:» (недопустимый в именах файловой системы) на «-»:
Код:

%<имя переменной окружения>:<что меняем>=<на что меняем>%

caustic 22-04-2011 12:19 1663828

Добрый день, помогите пожалуйста правильно внедрить переменную %date% в листинг моего батника:

PHP код:

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

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

amel27 22-04-2011 12:30 1663840

Цитата:

Цитата caustic
чтобы создалась папка с именем"cigi_PMI [текущая дата]" »

Код:

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

caustic 22-04-2011 12:59 1663861

PHP код:

echo off cigi.txt
dir cigi 
/>> cigi.txt

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

cscript doit
.vbs cigi.txt img.txt fullname.txt
for /"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])
то возможно ли каким то образом научить батник находить эту папку (у которой название будет меняться по крайней мере раз в день :) )и уже работать с ней на этапе:
PHP код:

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

?

irshat 21-04-2015 23:56 2498962

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

Georgio 22-04-2015 02:18 2499003

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 2499012

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

j-onson 05-02-2018 11:52 2795906

Пишу этот код
set sFolderName=...\%date%
md "%sFolderName::=-%"

Папка создается формата 05.02.2018 и в ней файлы, которые копирую

меняю на
md "%sFolderName:.=-%" создается папка формата 05-02-2018 (как мне и надо), а вот файлы копируются туда где лежит батник ((, что не так?
И еще вопрос: как поменять формат даты на yyyy-mm-dd

Сам разобрался. Если кому надо:
set sFolderName=...\%date:~6,4%-%date:~3,2%-%date:~,2%
md "%sFolderName%"

megaloman 05-02-2018 14:01 2795937

j-onson,
Чтобы не думать о формате отображения даты-времени в системе предлагаю использовать WMIC, хоть это и медленнее

Здесь представлено использование WMIC и примеры формирования даты в нужном Вам виде.
Также пример создания нужной выходной папки с датой и пример копирования туда файлов. В боевом варианте, естественно, перед Md и Copy уберите Echo
Код:

@Echo Off
cls

FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "Td=%%d"

Echo %Td%                              =YYYYMMDDttmmss
Echo %Td:~6,2%-%Td:~4,2%-%Td:~0,4%      =DD-MM-YYYY
Echo %Td:~0,4%-%Td:~4,2%-%Td:~6,2%      =YYYY-MM-DD

Set "BoxIn=Z:\Box_In"
Set "BoxOut=Z:\Box_Out"
Set "Td=%Td:~0,4%-%Td:~4,2%-%Td:~6,2%"

Set "BoxOutD=%BoxOut%\%Td%"

Echo Md "%BoxOutD%" 2>nul
Echo Copy "%BoxIn%\*.*" "%BoxOutD%\"

Pause

Естественно, пути надо указать свои

Опиум 06-02-2018 00:04 2796102

Цитата:

Цитата aggressor_
Напр: 20.01.2011 (15:43:17) »

Извиняюсь, конечно, ИМХО правилами хорошего тона принято называть папки, начиная с года и дальше по убывающей значимости...

AleksandrG 08-02-2018 16:02 2796760

часто использую такой код
Код:

  :DateTime
Set DateTime=%date:~8,2%%date:~3,2%%date:~0,2%_%time:~0,2%%time:~3,2%
        Set DateTime=%DateTime: =0%

получается ГГММДД_ЧЧММСС, и в таком варианте вместо 18 2 8_23 215 будет 180208_230215


Время: 23:23.

Время: 23:23.
© OSzone.net 2001-