批处理脚本中获取MM.dd.yyyy格式日期以创建含主机名的每日备份文件夹的问题
批处理脚本中获取MM.dd.yyyy格式日期以创建含主机名的每日备份文件夹的问题
我来帮你搞定这个日期格式的问题!你当前的困扰是系统默认的%date%变量输出是dd-MM-yyyy格式,直接替换分隔符没法得到你想要的MM.dd.yyyy,而且这种方法还会受系统区域设置影响,稳定性很差。下面给你提供修改后的完整脚本,同时解释核心的修改点:
关键修改说明
- 替换了原来依赖系统
%date%变量的日期获取方式,改用wmic命令提取统一格式的月、日、年数据,不管系统日期格式怎么设置,都能稳定生成MM.dd.yyyy格式的日期 - 给月和日补了前导零,确保像1月、5号这样的日期能变成
01、05,完全符合你要的格式规范
修改后的完整脚本
@echo off REM 获取主机名 FOR /F "usebackq" %%i IN (`hostname`) DO SET host=%%i ECHO 主机名:%host% REM 获取统一格式的日期(MM.dd.yyyy) REM 用wmic提取月、日、年,避免受系统日期格式影响 for /f "tokens=2 delims==" %%a in ('wmic path win32_localtime get month /value') do set month=%%a for /f "tokens=2 delims==" %%a in ('wmic path win32_localtime get day /value') do set day=%%a for /f "tokens=2 delims==" %%a in ('wmic path win32_localtime get year /value') do set year=%%a REM 给月、日补前导零,确保是两位数字 set month=0%month% set month=%month:~-2% set day=0%day% set day=%day:~-2% REM 组合成MM.dd.yyyy格式的日期 set mydate=%month%.%day%.%year% ECHO 格式化后的日期:%mydate% REM 获取时间并格式化 set mytime=%time:~-11,2%-%time:~-8,2%-%time:~-5,2% set mytimestamp=%mydate%_%mytime:.=% echo 完整时间戳:%mytimestamp% REM 生成含主机名的备份文件夹名称 set mynewtimestamp=%host%_%mydate% echo 备份文件夹名称:%mynewtimestamp% REM 设置路径(请根据实际情况修改) set path=C:\Program Files\WinRAR;C:\Program Files\Microsoft SQL Server\150\Tools\Binn;C:\WINDOWS\System32; REM 设置备份目标路径(请根据实际情况修改) set BackupDest=D:\Daily_Backup\Backup\ REM 创建文件夹(已存在则忽略错误) md "%BackupDest%\%mynewtimestamp%" 2>NUL REM 打包TEST目录为RAR rar a -ep1 "%BackupDest%\%mytimestamp%_TEST.rar" "C:\Program Files\TEST" REM MSSQL数据库备份 "osql.exe" -E -Q "BACKUP DATABASE [TEST] TO DISK='%BackupDest%\%mytimestamp%_MSSQL_TEST.bak' WITH FORMAT" REM 打包SQL备份文件为RAR rar a -epl "%BackupDest%\%mytimestamp%_SQL_Backup.rar" "%BackupDest%*.bak" REM 移动备份文件到对应文件夹并清理临时文件 pushd "%BackupDest%" del *.bak del *.reg ROBOCOPY "D:\Daily_Backup\Backup" "%BackupDest%\%mynewtimestamp%" /z /MOV /MT32 popd echo 备份任务完成!
额外简洁方案(适合Win7及以上系统)
如果你觉得wmic的写法有点繁琐,也可以用PowerShell来获取日期,替换脚本里的日期获取部分为以下代码,效果一样且更简洁:
for /f %%a in ('powershell -Command "Get-Date -Format 'MM.dd.yyyy'"') do set mydate=%%a
备注:内容来源于stack exchange,提问作者Babeesh Bhaskar
相关产品推荐
相关产品推荐

