【问题标题】:How to create a folder with name as current date in batch (.bat) files如何在批处理 (.bat) 文件中创建名称为当前日期的文件夹
【发布时间】:2011-03-30 11:46:35
【问题描述】:

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

【问题讨论】:

标签: windows batch-file


【解决方案1】:
mkdir %date:~-4,4%%date:~-10,2%%date:~7,2%

【讨论】:

  • 严重取决于区域设置
  • 如果我希望日期改为“ddmmyy”会怎样?
【解决方案2】:

又快又脏:如果您可以接受 UTC 而不是本地日期,您可以使用:

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

适用于所有语言环境。不过,仅适用于 XP 及更高版本。

【讨论】:

  • 优秀的答案。为了动态地创建带有日期和时间的新目录,我使用了for /f "skip=1" %%d in ('wmic os get localdatetime') do set mydate=%%d,然后是md %mydate%
【解决方案3】:

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

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

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

【讨论】:

  • 为了更简单:mkdir %date:/=%
  • @Adriano:令人印象深刻。您能否详细说明:/= 的事情?为此提出了一个问题:stackoverflow.com/q/21032288/520162
  • @AdrianoRepetti:此命令在我的机器上创建 两个 子文件夹 - 03032015Tue
  • @itsho date 输出是特定于区域设置的,因此您可能需要调整到您的区域设置。例如,如果您的输出是03/03/2015 Tue...,那么您将创建多个文件夹(date 输出字符串中的每个“单词”对应一个,因为最终命令类似于mkdir 03032015 Tue)。要解决此问题,您可以使用eol= 选项(将空格设置为行尾,更多robust)或使用mkdir %date:~0,8% 修剪环境变量。您也有其他选择(例如字符替换),但如果您需要一个可移植的解决方案,您应该使用 PowerShell...希望这会有所帮助!
  • 正确命令年月日:mkdir %date:~-4,4%"-"%date:~-7,2%"-"%date:~-10,2%
【解决方案4】:

您需要去掉日期中的“/”字符,然后才能在 mkdir 中使用它,如下所示:

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

【讨论】:

  • 令人惊讶的是,这是在创建名为 T2011 的文件夹。里面没有月份和日期。
  • 如果您echo %DATE%,您应该会看到当前日期。格式取决于国际区域设置。如果你想让这个 bat 文件在任何地方运行,你需要做一些复杂的事情。我假设它是由 / 字符分隔的日、月和年。既然你的结果中有一个 T,我想它不是。这是什么?
  • 考虑了几分钟并搜索了一下,这种使用 JavaScript 的方法应该可以在世界任何地方工作:echo var D = new Date() > tmp.jsecho D = (D.getFullYear()*100+D.getMonth()+1)*100+D.getDate() >> tmp.jsecho WScript.Echo( 'set YYYYMMDD='+D ) >> tmp.jsecho @echo off > tmp.batcscript //nologo tmp.js >> tmp.bat@ 987654329@mkdir %YYYYMMDD%
  • 好吧,我无法正确格式化 - 我将添加一个新答案
【解决方案5】:

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

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

【讨论】:

  • 这里有很多几乎相同的答案,其中一些来自 2013 年。我看不出你的答案在哪里增加了任何改进。顺便说一句,您的格式甚至不足以进行简单的排序。
  • 有改进之处在于没有其他人拥有这种格式的 mm-dd-yyyy 并且当我阅读此页面为自己找到解决方案时,如何做到这一点并不明显。这就是为什么我决定将我的解决方案分享给任何想要这种日期格式样式的人,这样他们也不必经历改变这些其他解决方案的麻烦,其中一些解决方案甚至不起作用。所以感谢 Jeb 的意见,但我不同意。
  • 对于格式 yyyy.mm.dd,您将使用 mkdir %date:~-4,4%"."%date:~-7,2%"."%date:~0,2%(在德语 Win10 上测试)
【解决方案6】:

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

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

echo %date%    
pause

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

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

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

set temp=%DATE:/=%

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


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

例如我需要YYYYMMDD格式的日期,那么我需要设置目录名如下

为了解释它是如何工作的,我们需要比较 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%

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

目录将在此批处理执行的地方创建。

【讨论】:

  • 我改变了一点,改变了子字符串
【解决方案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%

【讨论】:

  • 如果您使用 %TEMP% 或 %tmp% 作为路径并且删除了临时文件,我会 +1。 :)
【解决方案8】:

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

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

在命令提示符下键入:

ECHO %DATE%

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

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

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

【讨论】:

    【解决方案9】:
    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

    【讨论】:

      【解决方案10】:

      这应该可行:

      mkdir %date%
      

      如果没有,试试这个:

      setlocal enableextensions
      mkdir %date%
      

      【讨论】:

      • @Blorgbeard 这是创建名为 T2011 的文件夹,其中 2011 是年份。我正在使用 WindowsXp,但不确定为什么其中没有月份和日期。
      • @Ramesh,echo %date% 输出什么?这将取决于您的区域设置 - 我说“2011-03-30”
      • @Blorgbeard 即使文件夹名称被创建为 T2011。我正在使用标准的美国英语文化。有什么我想念的吗?
      • @Ramesh,echo %date% 是否输出 T2011 而没有别的?
      • @Blorgbeard 是的,只是 T2011,没有别的。
      【解决方案11】:

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

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

      【讨论】:

        【解决方案12】:

        我早上 10 点之前就和你坐在同一条船上,我不能使用下面的,我将时间从 12 小时设置为 24 小时,将 hh/mm 更改为 HH/mm 我尝试过的最多我能找到的代码。下面将至少有一点帮助。调整和修复:)

        以下可能也有帮助

        设置 DD=%DATE:~0,2%

        设置 MM=%DATE:~3,2%

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

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

        设置 hh=%hh: =0%

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

        如果 "%time:~0,1%" == " " (set folderdate=0%time:~1,1%) ELSE set folderdate=%time:~0,2%

        mkdir 文件夹日期=%date:~6%%date:~3,2%%date:~0,2%_%folderdate%%time:~3,2%

        复制 \Makereport*.CSV \Makereport\%folderdate%\

        cd %文件夹日期% REM -(c:\batch 中的 7zip) 路径 = c:\batch

        7z a Retail.zip *.CSV -pRetailPassword

        cd..

        删除 *.csv

        【讨论】:

          【解决方案13】:

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

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

          命令 %日期:~1,3% 返回值 周一

          命令 %日期:~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% 创建一个名为的目录 2015 年 11 月 23 日

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

          【讨论】:

            【解决方案14】:

            如果您的语言环境具有日期格式“DDMMYYYY”,则必须这样设置:

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

            【讨论】:

              【解决方案15】:

              这对我有用,试试:

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

              【讨论】:

                【解决方案16】:

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

                @ 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

                【讨论】:

                  【解决方案17】:

                  你会喜欢这个的,改变它以适应你的要求。

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

                  【讨论】:

                    【解决方案18】:

                    我在替换之前使用下一个代码来制作文件副本(例如test.txt):

                    cd /d %~dp0
                    set backupDir=%date:~7,2%-%date:~-10,2%-%date:~-2,2%_%time:~0,2%.%time:~3,2%.%time:~6,2%
                    echo make dir %backupDir% ...
                    md "%backupDir%"
                    copy test.txt %backupDir%
                    

                    它以DD-MM-YY_HH.MM.SS 格式创建目录并将text.txt 放置在那里。 名称中包含秒数的时间是创建目录所必需的,无需额外验证。

                    【讨论】:

                      【解决方案19】:

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

                      【讨论】:

                        【解决方案20】:

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

                        @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-/m-/f” .

                        【讨论】:

                          【解决方案21】:

                          这对我来说效果更好,

                          @echo off    
                          set temp=%DATE:/=%
                          set dirname="%temp:~4,4%%temp:~2,2%%temp:~0,2%"
                          mkdir %dirname%
                          

                          【讨论】:

                          • 为什么?不适合我(以及世界上 90% 的人)
                          • 也许我的区域设置,这种方式效果更好;我没有得到那些“星期五”的初始字符​​span>
                          【解决方案22】:

                          对于带有 HUN 设置的 YYYY.MM.DD 格式,请使用以下内容。它转换为“2021.02.23”。到“2021.02.23”:

                          SET dirname="%date:~0,5%%date:~6,3%%date:~10,2%"
                          md %dirname%
                          

                          【讨论】:

                            【解决方案23】:
                            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
                            

                            【讨论】:

                            • 为什么是 sqlplus ?这无关紧要,还有G:,请解释一下你的解决方案
                            【解决方案24】:

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

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

                            它创建了一个如下所示的文件夹: 2018-10-23-17.18.34

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

                            【讨论】:

                              【解决方案25】:
                              setlocal enableextensions 
                              set name="%DATE:/=_%"
                              mkdir %name%
                              

                              只创建一个文件夹,如“Tue 01_28_2020”

                              【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 2014-11-13
                              • 1970-01-01
                              • 1970-01-01
                              • 2021-05-24
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2014-12-09
                              相关资源
                              最近更新 更多