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

53

我对Windows的批处理文件语法不是很了解。我的简单需求是在特定位置创建一个以当前日期命名的文件夹。我尝试在Google上搜索,但没有找到任何好的选项。有没有什么办法可以做到这一点?


25个回答

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

12
严重依赖于区域设置。 - Blorgbeard
如果我想要日期格式为“ddmmyy”会发生什么? - compski
对于巴西用户,请尝试执行以下命令:mkdir %date:-4,4%%date:3,2%%date:~-10,2% - Denis Dos Santos Silva

23

简单粗暴的方法:如果你可以接受日期是UTC而不是本地时间,你可以使用以下方法:

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

适用于所有区域设置。但仅适用于XP及更高版本。


1
非常好的答案。为了动态地使用日期和时间创建新目录,我使用了 for /f "skip=1" %%d in ('wmic os get localdatetime') do set mydate=%%d 然后跟着 md %mydate% - mikequentel

21

尝试使用这个(相当于bash backquotes的等价物):

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

如需更多信息,请参见http://ss64.com/nt/for_cmd.html


26
为了让它更容易:mkdir %date:/=% 的意思是创建一个以当前日期为名称的文件夹(%date%表示当前日期,: / =%表示将日期中的斜杠替换为空格)。 - Adriano Repetti
3
@Adriano: 厉害。能否详细解释一下 :/= 这个东西?我已经为此提了一个问题:https://dev59.com/9mEi5IYBdhLWcg3wsODc - eckes
2
@AdrianoRepetti:这个命令在我的机器上创建了两个子文件夹 - 03032015Tue - itsho
2
@itsho date 输出是与地区相关的,因此您可能需要根据自己的地区进行调整。例如,如果您的输出是 03/03/2015 Tue...,那么您将会创建多个文件夹(每个 "word" 在 date 输出字符串中都会创建一个文件夹),因为最终的命令将类似于 mkdir 03032015 Tue。要解决这个问题,您可以使用 eol= 选项(将空格设置为行尾,更加健壮)或者使用 mkdir %date:~0,8% 命令来修剪环境变量。您还有其他选项(例如字符替换),但如果您需要一个可移植的解决方案,建议使用 PowerShell...希望这能帮到您! - Adriano Repetti
@AdrianoRepetti,那真是启发人心。谢谢! - itsho
11
正确的命令年-月-日格式为:mkdir %date:~-4,4%"-"%date:~-7,2%"-"%date:~-10,2% - Delmonte

19
你需要在使用mkdir之前去掉日期中的“/”字符,就像这样:
setlocal enableextensions
set name=%DATE:/=_%
mkdir %name%

出人意料的是,这将创建名为T2011的文件夹。其中没有包括月份和日期信息。 - Ramesh Soni
如果你输入 echo %DATE%,你应该能看到当前的日期。格式取决于国际区域设置。如果你想让这个批处理文件在任何地方都能运行,你需要做一些复杂的事情。我假设它是以 / 字符分隔的日、月和年。但由于结果中有一个 T,我猜它不是这样的。那它是什么呢? - Simon G.
1
经过几分钟的思考和一些谷歌搜索,这种使用JavaScript的方法应该可以在世界各地都适用:`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%` - Simon G.
好的,我无法正确格式化它 - 我会添加一个新答案。 - Simon G.

13

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

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

1
这里有许多几乎完全相同的答案,其中一些来自2013年。我看不出你的答案有任何改进。顺便说一句,你的格式甚至不足以进行简单的排序。 - jeb
2
这里有一个改进,就是没有其他人使用这种格式mm-dd-yyyy。当我在阅读这个页面寻找解决方案时,如何做到这一点并不明显。这就是为什么我决定分享我的解决方案给任何想要这种日期格式的人,这样他们也不必费力地改变其他一些甚至不起作用的解决方案。所以谢谢Jeb的贡献,但我不同意。 - jelde015
2
对于格式为yyyy.mm.dd,您可以使用mkdir %date:~-4,4%"."%date:~-7,2%"."%date:~0,2%(在德国Win10上测试过)。 - PeterCo

11

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

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

echo %date%    
pause

它会输出一段文本,对我来说显示的是“Fri 05/06/2015”。

现在我们需要去掉斜杠(/)。

为此,请在批处理文件中包含以下代码。

set temp=%DATE:/=%

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


现在,你需要做的就是按照你想要的方式格式化日期。

例如,我需要以YYYYMMDD的格式显示日期,那么我需要设置dirname如下:

为了解释这个过程,我们需要比较temp的值。

Fri 05062015.

现在对每个字符进行编号,从0开始。

Fri 0506201 5

01234567891011

所以对于我需要的日期格式20150605,

年份2015,在第8个位置上是2,因此从第8个位置到第4个位置,它将变成2015。

月份06,在第6个位置上是0,因此从第6个位置到第2个位置,它将变成06。

日期05,在第4个位置上是0,因此从第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%

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

该目录将会在批处理文件执行的地方创建。


我稍微修改了一下,改变了子字符串。 - rodolfoprado

8
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%

如果您使用%TEMP%或%tmp%作为路径,并删除临时文件,我会点赞的。 :) - Bernhard Hofmann

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


5

我曾经遇到过这个问题,因为我的服务器绝对需要以 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%

3
这应该可以正常工作:
mkdir %date%

如果没有成功,请尝试以下步骤:
setlocal enableextensions
mkdir %date%

@Blorgbeard 这将创建一个名为T2011的文件夹,其中2011是年份。我正在使用Windows XP,但不确定为什么它没有包含月份和日期。 - Ramesh Soni
@Ramesh,echo %date% 输出什么?这将取决于您的区域设置 - 我的显示为“2011-03-30”。 - Blorgbeard
@Blorgbeard,甚至文件夹名称也被创建为T2011。我正在使用标准的美式英语文化。我是否漏掉了什么? - Ramesh Soni
@Ramesh,执行echo %date%命令是否只输出了T2011 - Blorgbeard
@Blorgbeard 是的,只有 T2011,没有其他的。 - Ramesh Soni
@Ramesh 好的,那我就束手无策了,抱歉 :) Simon的回答看起来很有希望.. - Blorgbeard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接