我对Windows的批处理文件语法不是很了解。我的简单需求是在特定位置创建一个以当前日期命名的文件夹。我尝试在Google上搜索,但没有找到任何好的选项。有没有什么办法可以做到这一点?
我对Windows的批处理文件语法不是很了解。我的简单需求是在特定位置创建一个以当前日期命名的文件夹。我尝试在Google上搜索,但没有找到任何好的选项。有没有什么办法可以做到这一点?
mkdir %date:~-4,4%%date:~-10,2%%date:~7,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%
。 - mikequentel尝试使用这个(相当于bash backquotes的等价物):
for /f "tokens=1* delims=" %%a in ('date /T') do set datestr=%%a
mkdir %datestr%
如需更多信息,请参见http://ss64.com/nt/for_cmd.html
。mkdir %date:/=%
的意思是创建一个以当前日期为名称的文件夹(%date%表示当前日期,: / =%表示将日期中的斜杠替换为空格)。 - Adriano Repetti:/=
这个东西?我已经为此提了一个问题:https://dev59.com/9mEi5IYBdhLWcg3wsODc - eckes03032015
和 Tue
。 - itshodate
输出是与地区相关的,因此您可能需要根据自己的地区进行调整。例如,如果您的输出是 03/03/2015 Tue...
,那么您将会创建多个文件夹(每个 "word" 在 date
输出字符串中都会创建一个文件夹),因为最终的命令将类似于 mkdir 03032015 Tue
。要解决这个问题,您可以使用 eol=
选项(将空格设置为行尾,更加健壮)或者使用 mkdir %date:~0,8%
命令来修剪环境变量。您还有其他选项(例如字符替换),但如果您需要一个可移植的解决方案,建议使用 PowerShell...希望这能帮到您! - Adriano Repettimkdir %date:~-4,4%"-"%date:~-7,2%"-"%date:~-10,2%
。 - Delmontesetlocal enableextensions
set name=%DATE:/=_%
mkdir %name%
T2011
的文件夹。其中没有包括月份和日期信息。 - Ramesh Soniecho %DATE%
,你应该能看到当前的日期。格式取决于国际区域设置。如果你想让这个批处理文件在任何地方都能运行,你需要做一些复杂的事情。我假设它是以 / 字符分隔的日、月和年。但由于结果中有一个 T,我猜它不是这样的。那它是什么呢? - Simon G.`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.如果您想使用 mm-dd-yyyy
格式,可以使用:
mkdir %date:~-10,2%"-"%date:~7,2%"-"%date:~-4,4%
mkdir %date:~-4,4%"."%date:~-7,2%"."%date:~0,2%
(在德国Win10上测试过)。 - PeterCo这取决于计算机的区域设置,因此首先使用命令提示符检查日期输出或通过对日期执行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%
======================================================
该目录将会在批处理文件执行的地方创建。
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%
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的新文件夹。
我曾经遇到过这个问题,因为我的服务器绝对需要以 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%
mkdir %date%
setlocal enableextensions
mkdir %date%
echo %date%
输出什么?这将取决于您的区域设置 - 我的显示为“2011-03-30”。 - Blorgbeardecho %date%
命令是否只输出了T2011
? - Blorgbeard