it-swarm.com.ru

Как создать папку с именем текущей даты в пакетных (.bat) файлах

Я не очень разбираюсь в синтаксисе файлов Windows .bat. Мое простое требование - создать папку в определенном месте с именем в качестве текущей даты. Я пытался найти это в Google, но не нашел хорошего варианта. Есть какой-либо способ сделать это?

32
Ramesh Soni

Попробуйте это (эквивалент обратных кавычек bash):

for /f "tokens=1* delims=" %%a in ('date /T') do set datestr=%%a
mkdir %datestr%

Для получения дополнительной информации см. http://ss64.com/nt/for_cmd.html

17
Franck Freiburger
mkdir %date:~-4,4%%date:~-10,2%%date:~7,2%
35
Stefano Travelli

Быстро и грязно: если вы можете жить с датой UTC вместо локальной, вы можете использовать:

for /f "skip=1" %%d in ('wmic os get localdatetime') do if not defined mydate set mydate=%%d
md %mydate:~0,8%

Работает во всех регионах. Только на XP и выше.

19
Joey

Вам нужно избавиться от символов '/' в дате, прежде чем вы сможете использовать ее в mkdir следующим образом:

setlocal enableextensions
set name=%DATE:/=_%
mkdir %name%
13
Simon G.

Если вы хотите формат mm-dd-yyyy, вы можете использовать: 

mkdir %date:~-10,2%"-"%date:~7,2%"-"%date:~-4,4%
8
jelde015
echo var D = new Date() > tmp.js 
echo D = (D.getFullYear()*100+D.getMonth()+1)*100+D.getDate() >> tmp.js 
echo WScript.Echo( 'set YYYYMMDD='+D ) >> tmp.js 
echo @echo off > tmp.bat 
cscript //nologo tmp.js >> tmp.bat 
call tmp.bat
mkdir %YYYYMMDD%
7
Simon G.

Это зависит от региональных настроек компьютера, поэтому сначала проверьте вывод даты с помощью команды «Подсказка» или с помощью эха даты.

Для этого создайте командный файл и добавьте содержимое ниже

echo %date%<br\>    
pause

Это производит вывод, в моем случае это показывает Пт 05/06/2015.

Теперь нам нужно избавиться от косой черты (/)

Для этого включите приведенный ниже код в пакетный файл.

set temp=%DATE:/=%

если вы повторяете «темп», вы можете увидеть дату без косой черты.


Теперь все, что вам нужно сделать, это отформатировать дату так, как вы хотите.

Например, мне нужна дата в формате ГГГГММДД, затем мне нужно установить имя директора, как показано ниже

Чтобы объяснить, как это работает, нам нужно сравнить значение temp

Пт 05062015.

теперь расположите каждый символ с номерами, начинающимися с 0.

Пт 0506201 5

01234567891011

Так что для формата даты, который мне нужен, это 20150605,

2015 год, в котором 2 находится на 8-й позиции, то есть с 8-й позиции до 4-х, будет 2015 годом.

Месяц 06, в котором 0 находится на 6-й позиции, то есть с 6-й позиции до 2-х позиций, составит 06.

День 05, в котором 0 находится на 4-й позиции, то есть с 4-й позиции до 2-х, составит 05.

Итак, наконец, чтобы настроить окончательный формат, у нас есть ниже.

SET dirname="%temp:~8,4%%temp:~6,2%%temp:~4,2%"

Чтобы улучшить этот формат даты с помощью «-» или «_» между датой, месяцем и годом, вы можете изменить его с помощью ниже 

SET dirname="%temp:~8,4%-%temp:~6,2%-%temp:~4,2%"

или же 

SET dirname="%temp:~8,4%_%temp:~6,2%_%temp:~4,2%"

Таким образом, окончательный код партии будет 

================================================== ====

@echo off<br\>    
set temp=%DATE:/=%<br\>
set dirname="%temp:~8,4%%temp:~6,2%%temp:~4,2%"<br\>
mkdir %dirname%<br\>

================================================== ====

Каталог будет создан в том месте, где выполняется этот пакет.

6
nirmalraj17
for /F “tokens=1-4 delims=/ ” %%A in (‘date /t’) do (
    set DateDay=%%A
    set DateMonth=%%B
    set DateYear=%%C
)
set CurrentDate=%DateDay%-%DateMonth%-%DateYear%
md %CurrentDate%

Это даст вам вновь созданную папку с сегодняшней датой в формате DD-MM-YY

Источник: База знаний ALi

5
Mark snow

У меня была проблема с этим, потому что мой сервер АБСОЛЮТНО должен был иметь свою дату в формате MM/dd/yyyy, в то время как я хотел, чтобы каталог был в формате YYYY-MM-DD для удобства. Вот как получить его в формате ГГГГ-ММ-ДД, независимо от того, какие региональные настройки установлены.

Узнайте, что отображается при использовании% DATE%:

Из командной строки введите: 

ECHO %DATE%

Шахта вышла 06/06/2013 (по состоянию на 6 марта 2013 г.)

Поэтому, чтобы получить имя каталога как 2013-03-06, запишите его в свой пакетный файл:

SET dirname="%date:~6,4%-%date:~0,2%-%date:~3,2%"
mkdir %dirname%
4
user2138753

Это должно работать:

mkdir %date%

Если это не так, попробуйте это:

setlocal enableextensions
mkdir %date%
3
Blorgbeard

Если ваша локаль имеет формат даты "DDMMYYYY", вам нужно установить его следующим образом:

set datestr=%date:~-4,4%%date:~3,2%%date:~-10,2%
mkdir %datestr%
2
Marco

Я сижу в той же лодке, что и вы, как только я до 10 часов утра, я не могу использовать нижеприведенное, я установил свое время с 12 до 24 часов, изменил чч/мм на чч/мм. Я перепробовал большинство кодов. я мог бы найти. ниже поможет хоть немного. Твик и исправление :)

Ниже может помочь также

установите DD =% DATE: ~ 0,2%

установите MM =% DATE: ~ 3,2%

установите YY =% DATE: ~ 8,2%

установить ГГГГ =% ДАТА: ~ 6,4%

установить чч =% чч: = 0%

установить мм =% ВРЕМЯ: ~ 3,2%

если "% time: ~ 0,1%" == "" (установить folderdate = 0% времени: ~ 1,1%) ELSE установить folderdate =% time: ~ 0,2%

mkdir folderdate =% date: ~ 6 %% date: ~ 3,2 %% date: ~ 0,2% _% folderdate %% time: ~ 3,2%

copy\Makereport * .CSV\Makereport \% folderdate% \

cd% folderdate% REM - (7 ZIP в c:\batch) Path = c:\batch

7z a Retail.Zip * .CSV -pRetailPassword

cD..

del * .csv

2
Bize32

Это работает для меня, попробуйте:

ECHO %DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%
1
Natan Braslavski

это более простое решение.

@ECHO OFF
set name=%date%
echo %name%
mkdir %name% 
1
Gaurav Kolarkar_InfoCepts

Вам понравится это, измените его так, чтобы оно соответствовало вашим требованиям.

mkdir today
Copy Desktop\test1\*.* today
setlocal enableextensions
set name=%DATE:/=_%
Rename "today" _OlddatabaseBackup_"%name%"
1
James Carroll

выражение %date:~p,n% возвращает n символов из позиции p в строке даты.

если моя системная строка даты Mon23/11/2015 

команда % date: ~ 1,3% возвращает значение Mon

команда % date: ~ 10,4% возвращает значение 2015 

и в сочетании с командой md (или mkdir) 

команда md% date: ~ 10,4 %% date: ~ 7,2 %% date: ~ 4,2% делает каталог с именем 20151123 

аналогично, если ваша строка даты в формате Понедельник, 23 ноября/2015 

команда md% date: ~ 16,4 %% date: ~ 12,3 %% date: ~ 9,2% создает каталог с именем 2015Nov23 

Если вы случайно вернете символы из строки даты, которые не разрешены в именах папок, или используете недопустимые значения для p и n, вы получите ошибку . Кроме того, если вы вернете значения, включающие \, это может создать папку в папке.

1
Leigh

Используйте этот пакетный скрипт, сделанный мной:

@echo off
title Folder Creator
color b
setlocal enabledelayedexpansion
echo Enter the folder name, you can use these codes:
echo /t - Time (eg. 16:29)
echo /d - Date (eg. 17-02-19)
echo /a - Day (eg. 17)
echo /m - Month (eg. 02)
echo /y - Year (eg. 19)
echo /f - Full Year (eg. 2019)
echo.
set /p foldername=Folder Name:
set foldername=%foldername:/t=!time:~0,5!%
set foldername=%foldername:/d=!date:~0,2!-!date:~3,2!-!date:~8,2!%
set foldername=%foldername:/a=!date:~0,2!%
set foldername=%foldername:/m=!date:~3,2!%
set foldername=%foldername:/y=!date:~8,2!%
set foldername=%foldername:/f=!date:~6,4!%
md %foldername%

Например, если вы хотите создать папку с именем даты в формате DD-MM-YY , введите «/ d», но если вы хотите сделать это в DD-MM- ГГГГ формат вы должны ввести "/ a -/ m -/ f".

0
Hayz

Мне нужны были и дата, и время:

mkdir %date%-%time:~0,2%.%time:~3,2%.%time:~6,2%

Который создал папку, которая выглядела как: 2018-10-23-17.18.34

Время нужно было объединить, потому что оно содержало :, что недопустимо в Windows. 

0
andre

https://stackoverflow.com/a/31789045/1010918 Ответ foxidrive помог мне получить папку с нужной мне датой и временем. Я хотел бы поделиться этим методом здесь, так как он отлично работал для меня, и я думаю, что он может помочь другим людям, независимо от их языка.

rem The four lines below will give you reliable YY DD MM YYYY HH Min Sec MS variables in XP Pro and higher.

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" & set "MS=%dt:~15,3%"

 set "dirname=%YYYY%-%MM%-%DD% %HH%-%Min%-%Sec%"

 :: remove echo here if you like
 echo "dirName"="%dirName%"
0
lowtechsun

Спасибо за информацию всем, очень полезно. Мне нужно было что-то, что могло бы создавать «резервную копию» папки так же часто, как каждую минуту, в одном и том же каталоге, а также вызывать ее позже в скрипте. Вот что я придумал: 

@ echo off

CD %userprofile%\desktop

SET Datefolder="%DATE:~4,2%-%DATE:~7,2%-%DATE:~12,2%_%time:~1,1%%time:~3,2%"

MD "%Datefolder%"

Это дает мне папку на рабочем столе пользователя, который в данный момент вошел в систему, с именем: mm-dd-yy_hmm (час, минута), то есть: 07-28-15_719

0
pshopgeek