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

Cri*_*scu 21 windows bash environment-variables

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

不幸的是,由于斜线,这不适用于日期格式为 y/m/d 的系统:

zip some_options "archive_%DATE%.zip"
Run Code Online (Sandbox Code Playgroud)

%DATE%变量扩展到像

Mon 09/28/2009
Run Code Online (Sandbox Code Playgroud)

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

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

zip [...] archive_`echo %DATE% | sed -e s/.../.../`.zip
Run Code Online (Sandbox Code Playgroud)

Windows 中有类似的东西吗?

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

Chr*_*her 32

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

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

  • 这甚至比:`%date:~-10,2%-%date:~-7,2%-%date:~-4,4%` 还要快! (8认同)

Sna*_*ark 5

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

有趣的部分是:

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

警告仍然相关:

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

如果您的区域设置设置为美国样式 (mm/dd/yyyy),您应该使用“%%k%%i%%j”(%%i = 月,%%j = 日,%%j = 年) .


slä*_*ker 5

我总是使用:

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

然后 CDate 将是 Sat02182012。如果你想让它更易于排序,将 CDate 设置为 %%d-%%b-%%c 所以它将是 2012-02-18

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

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