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

Ram*_*oni 38 windows batch-file

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

Ste*_*lli 38

mkdir %date:~-4,4%%date:~-10,2%%date:~7,2%
Run Code Online (Sandbox Code Playgroud)

  • *严重*取决于区域设置 (11认同)

Joe*_*oey 21

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

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

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


Fra*_*ger 18

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

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

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

  • 为了使它更容易:`mkdir%date:/ =%` (21认同)
  • 正确的命令年 - 月 - 日:`mkdir%date:〜-4,4%" - "%date:〜-7,2%" - "%date:〜-10,2%` (6认同)
  • @Adriano:令人印象深刻.你能详细说一下`:/ =`的东西吗?为此打开了一个问题:http://stackoverflow.com/q/21032288/520162 (2认同)
  • @AdrianoRepetti:此命令在我的机器上创建 **两个** 子文件夹 - `03032015` 和 `Tue` (2认同)
  • @itsho `date` 输出是特定于语言环境的,因此您可能需要适应您的语言环境。例如,如果您的输出是 `03/03/2015 Tue...`,那么您将创建多个文件夹(`date` 输出字符串中的每个“单词”一个,因为最终命令将类似于 `mkdir 03032015 星期二`)。要解决此问题,您可以使用 `eol= ` 选项(将空格设置为行尾,更多 _robust_ 一个)或使用 `mkdir %date:~0,8%` 修剪环境变量。您也有其他选择(例如字符替换),但如果您需要便携式解决方案,您应该使用 PowerShell ......希望这会有所帮助! (2认同)

Sim*_* G. 15

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

setlocal enableextensions
set name=%DATE:/=_%
mkdir %name%
Run Code Online (Sandbox Code Playgroud)


jel*_*015 10

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

mkdir %date:~-10,2%"-"%date:~7,2%"-"%date:~-4,4%
Run Code Online (Sandbox Code Playgroud)

  • 有所改进的是,没有其他人采用这种格式 mm-dd-yyyy,当我阅读此页面以找到自己的解决方案时,并不明显如何做到这一点。这就是为什么我决定将我的解决方案分享给任何想要这种日期格式样式的人,这样他们也不必经历更改这些其他解决方案的麻烦,其中一些解决方案甚至不起作用。谢谢杰布的意见,但我不得不不同意。 (2认同)
  • 对于格式 yyyy.mm.dd 您可以使用 `mkdir %date:~-4,4%"."%date:~-7,2%"."%date:~0,2%` (在德语 Win10 上测试) ) (2认同)

Sim*_* G. 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%
Run Code Online (Sandbox Code Playgroud)


小智 7

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

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

echo %date%    
pause
Run Code Online (Sandbox Code Playgroud)

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

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

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

set temp=%DATE:/=%
Run Code Online (Sandbox Code Playgroud)

如果你回显"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%"
Run Code Online (Sandbox Code Playgroud)

要在日期,月份和年份之间使用" - "或"_"增强此日期格式,您可以使用以下修改

SET dirname="%temp:~8,4%-%temp:~6,2%-%temp:~4,2%"
Run Code Online (Sandbox Code Playgroud)

要么

SET dirname="%temp:~8,4%_%temp:~6,2%_%temp:~4,2%"
Run Code Online (Sandbox Code Playgroud)

所以最终的批次代码将是

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

@echo off    
set temp=%DATE:/=%
set dirname="%temp:~8,4%%temp:~6,2%%temp:~4,2%"
mkdir %dirname%
Run Code Online (Sandbox Code Playgroud)

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

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


小智 5

我遇到了一个问题,因为我的服务器绝对必须采用 MM/dd/yyyy 格式的日期,而为了整洁起见,我希望目录采用 YYYY-MM-DD 格式。以下是如何以 YYYY-MM-DD 格式获取它,无论您的区域设置如何设置。

了解使用 %DATE% 时显示的内容:

从命令提示符键入:

ECHO %DATE%
Run Code Online (Sandbox Code Playgroud)

我的版本于 2013 年 3 月 6 日发布(截至 2013 年 3 月 6 日)

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

SET dirname="%date:~6,4%-%date:~0,2%-%date:~3,2%"
mkdir %dirname%
Run Code Online (Sandbox Code Playgroud)


小智 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%
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个新创建的文件夹,其中包含今天的日期,格式为DD-MM-YY

来自:阿里的知识库