如何在Bat脚本中通过PowerShell为SQL Server备份文件名添加日期
问题修复:为BAT脚本备份文件名添加yyyy_mm_dd格式日期
你的脚本核心问题在于日期变量的获取与引用方式错误,导致日期无法正确追加到文件名中。以下是修正后的完整脚本及关键修改说明:
修正后的脚本
@echo off powershell -Command "Remove-item -Path C:\Backup\db_temp\Backup_TmpTest.bak -Force" powershell -Command "Remove-item -Path C:\Backup\db_prod\Backup_Tmp.bak -Force" :: 正确获取yyyy_mm_dd格式的日期变量 for /f "delims=" %%a in ('powershell -Command "Get-Date -Format yyyy_MM_dd"') do set "date_str=%%a" sqlcmd -S WIN-xxxxxxxxx -i C:\ScriptBackup\DBBck.sql -o executeBackupOut.txt -U usersql -P usersql :: 引用日期变量生成带日期的压缩文件名 powershell -Command "Compress-Archive -Path C:\Backup\db_temp\Backup_TmpTest.bak -Force -DestinationPath C:\Backup\db_temp\Backup_TmpTest_%date_str%.zip" powershell -Command "Compress-Archive -Path C:\Backup\db_prod\Backup_Tmp.bak -Force -DestinationPath C:\Backup\db_prod\Backup_Tmp_%date_str%.zip" EXIT
关键修改点说明
日期变量的正确获取
原脚本中set date = powershell -Command "Get-Date -Format MM-dd-yyyy"的写法错误:- BAT中直接用
set无法捕获外部命令(PowerShell)的输出,必须用for /f循环读取输出并赋值 - 变量名两侧的空格会被保留(变成
date而非date),导致后续引用失败 - 格式改为
yyyy_MM_dd以匹配你需要的日期格式
- BAT中直接用
变量引用方式修正
原脚本中用@date引用变量是错误的,BAT脚本中变量的正确引用格式是%变量名%,这里用%date_str%是为了避免和系统自带的%date%环境变量冲突。脚本开头添加
@echo off
可选但推荐,用来关闭命令行的命令回显,让脚本运行过程更简洁。
内容的提问来源于stack exchange,提问作者64Bit1990
相关产品推荐
相关产品推荐

