如何在批处理(.bat)文件中创建名称为当前日期的文件夹

问题描述 投票:35回答:21

我不太了解windows .bat文件的语法。我的简单要求是在特定位置创建一个文件夹,其名称为当前日期。我尝试在谷歌搜索这个但没有得到任何好的选择。有没有办法做到这一点?

windows batch-file
21个回答
18
投票

试试这个(相当于bash反引号):

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

有关详细信息,请参阅http://ss64.com/nt/for_cmd.html


3
投票

这应该工作:

mkdir %date%

如果没有,试试这个:

setlocal enableextensions
mkdir %date%

2
投票

我和AM一样坐在与你完全相同的船之前,我不能使用下面的,我已经将时间从12小时设置为24小时,将hh / mm改为HH / mm我已经尝试了大部分代码我能找到。下面至少会有所帮助。调整并修复:)

以下可能也有帮助

设定DD =%日期:〜0.2%

设定MM =%日期:~3,2%

设定YY =%DATE:~8,2%

设定YYYY =%DATE:~6,4%

设定hh =%hh:= 0%

设定mm =%TIME:~3,2%

如果“%time:~0.1%”==“”(设置folderdate = 0%时间:~1.1%)ELSE set 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 - (7zip in c:\ batch)Path = c:\ batch

7z是Retail.zip * .CSV -pRetailPassword

光盘..

来自* .csv


2
投票

如果您的语言环境的日期格式为“DDMMYYYY”,则必须按以下方式设置:

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

1
投票

这是一个更简单的解决方案。

@ECHO OFF
set name=%date%
echo %name%
mkdir %name% 

1
投票

这适用于我,尝试:

ECHO %DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%

1
投票

感谢所有信息,非常有帮助。我需要能够在同一目录中每分钟创建“备份”文件夹的东西,以及稍后在脚本中调用它。这是我想出的:

@ 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


1
投票

你会喜欢这个,改变它以便它可以满足你的要求。

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

1
投票

表达式%date:~p,n%返回日期字符串中位置p的n个字符。

如果我的系统日期字符串是Mon23 / 11/2015

命令%date:~1,3%返回值Mon

命令%date:~10,4%返回值2015

并与md(或mkdir)命令一起使用

命令md%date:~10,4 %% date:~7,2 %% date:~4,2%创建一个名为20151123的目录

同样,如果您的日期字符串格式为2015年11月23日星期一

命令md%date:~16,4 %% date:~12,3 %% date:~9,2%生成一个名为2015Nov23的目录

如果您不小心从日期字符串中返回文件夹名称中不允许的字符或使用p和n的无效值,您将收到错误。此外,如果您返回包含\的值,则可能会在文件夹中创建一个文件夹。


0
投票

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
投票

使用我制作的这个批处理脚本:

@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-YYYY格式执行此操作,则应键入“/ a- /”间/ F”。


36
投票
mkdir %date:~-4,4%%date:~-10,2%%date:~7,2%

-1
投票
G:

cd G:/app/

mkdir %date:~7,2%%date:~-10,2%%date:~-4,4% 

cd %date:~7,2%%date:~-10,2%%date:~-4,4% 

sqlplus sys/sys as sysdba @c:/new

-1
投票

我需要日期和时间并使用:

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

其中创建了一个类似于2018-10-23-17.18.34的文件夹

时间必须连接,因为它包含在Windows上不允许的:


21
投票

快速和脏:如果您可以使用UTC而不是本地日期,您可以使用:

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

适用于所有语言环境。但是,仅在XP及更高版本上。


14
投票

你需要摆脱日期中的'/'字符才能在mkdir中使用它,如下所示:

setlocal enableextensions
set name=%DATE:/=_%
mkdir %name%

9
投票

如果你想要mm-dd-yyyy格式,你可以使用:

mkdir %date:~-10,2%"-"%date:~7,2%"-"%date:~-4,4%

7
投票
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
投票

这取决于计算机的区域设置,因此首先使用命令提示符或通过回显日期来检查日期的输出。

为此,请创建批处理文件并添加以下内容

echo %date%    
pause

它产生一个输出,在我的例子中它显示了05/5/2015。

现在我们需要摆脱斜线(/)

为此,包括批处理文件中的以下代码。

set temp=%DATE:/=%

如果你回显“temp”,你可以看到没有斜线的日期。


现在您需要做的就是以您想要的方式格式化日期。

例如,我需要格式为YYYYMMDD的日期,然后我需要设置如下的dirname

为了解释这是如何工作的,我们需要比较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    
set temp=%DATE:/=%
set dirname="%temp:~8,4%%temp:~6,2%%temp:~4,2%"
mkdir %dirname%

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

该目录将在此批处理执行的位置创建。


5
投票
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's Knowledge Base


4
投票

我有一个问题,因为我的服务器绝对必须以MM / dd / yyyy格式保存日期,而我希望该目录为YYYY-MM-DD格式以保持整洁。无论您将区域设置设置为什么,以下是如何以YYYY-MM-DD格式获取它。

找出使用%DATE%时显示的内容:

从命令提示符下键入:

ECHO %DATE%

我的出现03/06/2013(截至2013年3月6日)

因此,要将目录名称设置为2013-03-06,请将其编码到批处理文件中:

SET dirname="%date:~6,4%-%date:~0,2%-%date:~3,2%"
mkdir %dirname%
© www.soinside.com 2019 - 2024. All rights reserved.