You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理脚本中获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 08:13:17