Windows 命令行:创建一个名称中包含当前日期的文件

Windows 命令行:创建一个名称中包含当前日期的文件

我正在尝试使用批处理脚本创建一个 zip 文件。我需要将其命名为 archive_.zip

不幸的是,由于斜线的存在,这在日期格式为 y/m/d 的系统上不起作用:

zip some_options "archive_%DATE%.zip"

%DATE%变量扩展为类似

Mon 09/28/2009

我可以访问 gnuwin32 包,因此我可以使用破折号sed替换空格和斜线。问题是,我如何使用 的输出sed来创建 zip 存档的文件名?

在 Unix(bash)中,可以使用反引号来就地执行命令并在另一个命令中使用其输出,例如:

zip [...] archive_`echo %DATE% | sed -e s/.../.../`.zip

Windows 中还有类似的东西吗?

或者也许有一种方法可以将变量设置为返回值sed并使用它来构造文件名?

答案1

您可以使用以下方法替换变量中的符号:

set _date=%DATE:/=-%

答案2

我已经发布了一个非常相似的问题的答案这里。字段中的日期拆分在一行中完成,而不是 harrymc 答案中的几行。

有趣的是:

@echo off
for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd=%%k%%j%%i
echo Date: %yyyymmdd%

并且警告仍然有意义:

警告:日期格式 (yyyymmdd=%%k%%j%%i) 取决于您的区域设置。因为我使用法语日期格式 (dd/mm/yyyy),所以我必须使用“%%k%%j%%i”作为格式 (%%i = 日,%%j = 月,%%j = 年)。

如果您的区域设置设为美国风格 (mm/dd/yyyy),则应使用“%%k%%i%%j”(%%i = 月,%%j = 日,%%j = 年)。

答案3

我总是使用:

For /f "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDate=%%a%%b%%c%%d

那么 CDate 将是 Sat02182012。如果想使其更易于排序,请将 CDate 设置为 %%d-%%b-%%c,这样它就是 2012-02-18

For /f "tokens=1,2 delims=:" %%f in ('time /t') do set CTime=%%f%%g

使日期和时间文件夹/文件变得友好。

答案4

由于您的问题被标记为 Windows,我发现这个解决方案可以在旧的 .bat 文件中运行:
“Windows 批处理文件 (.bat) 用于获取 MMDDYYYY 格式的当前日期”
并且可能可以适应你的情况:

echo on
@REM Seamonkey 的快速日期批处理(MMDDYYYY 格式)
@REM 设置 %date 变量
@REM 首先将月、日、年解析为 mm 、 dd 、 yyyy 格式,然后组合为 MMDDYYYY

FOR /F “TOKENS=1* DELIMS= ” %%A IN ('DATE/T') DO SET CDATE=%%B FOR
/F “TOKENS=1,2 eol=/ DELIMS=/ ” %%A IN ('DATE/T') DO SET mm=%%B FOR
/F “TOKENS=1,2 DELIMS=/ eol=/” %%A IN ('echo %CDATE%') DO SET dd=%%B
FOR /F “TOKENS=2,3 DELIMS=/ ” %%A IN ('echo %CDATE%') DO SET yyyy=%%Bv vSET date=%mm%%dd%%yyyy%

这什么也不做,只是将 %date 变量设置为 MMDDYYYY 格式的今天的日期,以便稍后可以在脚本中调用它。

编辑
找到了更好的语法。假设我的日期是今天“2009 年 9 月 28 日星期一”:
set day=%Date:~0,2%
set month=%Date:~7,2%
set year=%Date:~10,4%

相关内容