在批处理文件中使用日期和时间来创建文件名

guy*_*mfl 26 windows date-time batch-file

我正在从一个批处理文件运行一个程序,当它完成时会自动备份我的 MySQL 数据库。

我希望批处理文件为每次运行创建不同的备份,以便我可以回溯。

所需的文件名是 gnucash_shockwave-20121128210344.sql(日期格式 YYYY-MM-DD-HH-MM-SS)

我用Google搜索一些东西,说尽量%DATE:~4%%Date.Year%,但我得到一个错误,指出The system cannot find the specified path.

如果我删除尝试为其添加时间戳,脚本可以正常工作,但会覆盖以前的备份

这是我正在谈论的代码部分:

@REM *** EXECUTION ***
echo. Starting backup...
SET timestamp %DATE:~-4%%DATE:~4,2%%DATE:~7,2%%TIME%
%mysqldir%\mysqldump -u %mysqluser% -p%mysqlpassword% -h %mysqlhost% -P %mysqlport% --databases --routines --verbose gnucash_shockwave > %BackupDir%\gnucash_shockwave-%timestamp%.sql

echo.------------------------------------------------------
echo. Backup complete!
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Kar*_*ran 35

日期和时间格式取决于您在区域和语言控制面板小程序中指定的内容。

运行以下批处理文件(假设为dd/mm/yyyyhh:mm:ss)并根据需要修改子字符串提取(使用 : 和 ~ 字符)以从日期和时间字符串中获取正确的部分:

@echo off
cls
echo Date format = %date%
echo dd = %date:~0,2%
echo mm = %date:~3,2%
echo yyyy = %date:~6,4%
echo.
echo Time format = %time%
echo hh = %time:~0,2%
echo mm = %time:~3,2%
echo ss = %time:~6,2%
echo.
echo Timestamp = %date:~6,4%-%date:~3,2%-%date:~0,2%-%time:~0,2%-%time:~3,2%-%time:~6,2%
Run Code Online (Sandbox Code Playgroud)

有关子字符串提取的更多帮助,请set /?在命令提示符下键入或查看此页面

  • 我认为日期输出发生了变化,我得到 `> echo yyyy = %DATE:~6,4%` 来生成 `yyyy = /20/`。然而,“echo yyyy = %DATE:~10,4%”是“yyyy = 2019”。 (2认同)

小智 9

这对我有用。

Format - mmddyyyy_HHMMSS

echo %DATE% %TIME%

Date format = Thu 03/05/2015 15:48:26.22

echo mm = %date:~4,2%

echo dd = %date:~7,2%

echo yyyy = %date:~10,4%

echo Timestamp = %date:~4,2%%date:~7,2%%date:~10,4%_%time:~0,2%%time:~3,2%%time:~6,2%

Timestamp - 03052015_154013
Run Code Online (Sandbox Code Playgroud)

  • 欢迎使用超级用户!您能否编辑您的答案以包括对您的命令的作用的一些解释? (3认同)

Eri*_*let 5

抱歉耽搁了...

无论区域设置如何,获得适当日期的唯一可靠方法是 foxidrive @ /sf/ask/772648201/

@echo off
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 "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%"
set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"
pause
Run Code Online (Sandbox Code Playgroud)