【发布时间】:2011-03-30 11:46:35
【问题描述】:
我不太了解 windows .bat 文件的语法。我的简单要求是在特定位置创建一个文件夹,名称为当前日期。我试着在谷歌上搜索这个,但没有得到任何好的选择。有没有办法做到这一点?
【问题讨论】:
标签: windows batch-file
我不太了解 windows .bat 文件的语法。我的简单要求是在特定位置创建一个文件夹,名称为当前日期。我试着在谷歌上搜索这个,但没有得到任何好的选择。有没有办法做到这一点?
【问题讨论】:
标签: windows batch-file
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%
试试这个(相当于 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:/=%
:/= 的事情?为此提出了一个问题:stackoverflow.com/q/21032288/520162
03032015 和 Tue
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%
您需要去掉日期中的“/”字符,然后才能在 mkdir 中使用它,如下所示:
setlocal enableextensions
set name=%DATE:/=_%
mkdir %name%
【讨论】:
T2011 的文件夹。里面没有月份和日期。
echo %DATE%,您应该会看到当前日期。格式取决于国际区域设置。如果你想让这个 bat 文件在任何地方运行,你需要做一些复杂的事情。我假设它是由 / 字符分隔的日、月和年。既然你的结果中有一个 T,我想它不是。这是什么?
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%
如果你想要mm-dd-yyyy 格式,你可以使用:
mkdir %date:~-10,2%"-"%date:~7,2%"-"%date:~-4,4%
【讨论】:
mkdir %date:~-4,4%"."%date:~-7,2%"."%date:~0,2%(在德语 Win10 上测试)
这取决于计算机的区域设置,因此首先使用命令提示符或通过回显日期来检查日期的输出。
为此,请创建一个批处理文件并添加以下内容
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%
================================================ =======
目录将在此批处理执行的地方创建。
【讨论】:
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%
【讨论】:
我遇到了这个问题,因为我的服务器绝对必须将其日期设为 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%
【讨论】:
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
【讨论】:
这应该可行:
mkdir %date%
如果没有,试试这个:
setlocal enableextensions
mkdir %date%
【讨论】:
echo %date% 输出什么?这将取决于您的区域设置 - 我说“2011-03-30”
echo %date% 是否输出 T2011 而没有别的?
这是一个更简单的解决方案。
@ECHO OFF
set name=%date%
echo %name%
mkdir %name%
【讨论】:
我早上 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
【讨论】:
表达式%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 使用了无效值,您将收到错误消息。 此外,如果您返回包含 \ 的值,这可能会在文件夹中创建一个文件夹。
【讨论】:
如果您的语言环境具有日期格式“DDMMYYYY”,则必须这样设置:
set datestr=%date:~-4,4%%date:~3,2%%date:~-10,2%
mkdir %datestr%
【讨论】:
这对我有用,试试:
ECHO %DATE:~7,2%_%DATE:~4,2%_%DATE:~12,2%
【讨论】:
感谢大家提供的信息,非常有帮助。我需要一些可以在同一目录中每分钟创建“备份”文件夹的东西,以及稍后在脚本中调用它。这是我想出的:
@ 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
【讨论】:
你会喜欢这个的,改变它以适应你的要求。
mkdir today
Copy Desktop\test1\*.* today
setlocal enableextensions
set name=%DATE:/=_%
Rename "today" _OlddatabaseBackup_"%name%"
【讨论】:
我在替换之前使用下一个代码来制作文件副本(例如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 放置在那里。
名称中包含秒数的时间是创建目录所必需的,无需额外验证。
【讨论】:
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%"
【讨论】:
使用我制作的这个批处理脚本:
@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” .
【讨论】:
这对我来说效果更好,
@echo off
set temp=%DATE:/=%
set dirname="%temp:~4,4%%temp:~2,2%%temp:~0,2%"
mkdir %dirname%
【讨论】:
对于带有 HUN 设置的 YYYY.MM.DD 格式,请使用以下内容。它转换为“2021.02.23”。到“2021.02.23”:
SET dirname="%date:~0,5%%date:~6,3%%date:~10,2%"
md %dirname%
【讨论】:
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
【讨论】:
我需要日期和时间并使用:
mkdir %date%-%time:~0,2%.%time:~3,2%.%time:~6,2%
它创建了一个如下所示的文件夹:
2018-10-23-17.18.34
必须连接时间,因为它包含:,这在 Windows 上是不允许的。
【讨论】: