在Windows批处理文件中将日期附加到文件名

时间:2014-10-28 01:03:07

标签: sql-server tsql batch-file

我有一个批处理文件,用于备份我的SQL数据库,并希望将日期附加到创建文件的末尾。

  

sqlcmd -U sa -P pwd -S SERVER \ SQL2012 -Q" BACKUP DATABASE [MYDB] TO   DISK = N' E:\ Databases \ MYDB.bak'与NOFORMAT,NOINIT,NAME =   N' MYDB-完整数据库备份',SKIP,NOREWIND,NOUNLOAD,STATS = 10"   -d" MYDB"

目前我的所有备份都已添加到MYDB.bak文件中,但我想为每个备份添加新文件名,例如日期MYDB20141028.bak

2 个答案:

答案 0 :(得分:3)

您可以通过解析date命令的输出来获取当前日期。

如果您的语言环境是美国英语,则以下内容适用。

for /f "tokens=2,3,4 delims=/ " %%i in ('date /t') do set DATE=%%k%%i%%j

它将取date /t的输出并重新排列。分隔符将被设置为正斜杠和空格。然后它需要令牌2,3,4并以4,2,3的顺序输出它们。

因此需要Mon 10/27/2014并将其拆分为令牌:

  1. 星期一
  2. 10
  3. 27
  4. 2014
  5. 并将DATE变量设置为20141027

    通过它,您可以将我们的备份命令更改为:

    sqlcmd -U sa -P pwd -S SERVER\SQL2012 -Q "BACKUP DATABASE [MYDB] TO DISK = 
    N'E:\Databases\MYDB%DATE%.bak' WITH NOFORMAT, NOINIT, NAME = N'MYDB-Full Database Backup', SKIP,
    NOREWIND, NOUNLOAD, STATS = 10" -d "MYDB"
    

答案 1 :(得分:3)

如果要在SQL中附加日期,则选项是传递多个命令,如下所示:

  

sqlcmd -U sa -P pwd -S SERVER \ SQL2012 -Q“DECLARE @dest   NVARCHAR(最大); SET @dest = N'E:\ Databases \ MYDB'+   CONVERT(varchar(8),GETDATE(),112)+'。bak'; BACKUP DATABASE [MYDB] TO   DISK = @dest'WITH NOFORMAT,NOINIT,NAME = N'MYDB-Full Database   备份',SKIP,NOREWIND,NOUNLOAD,STATS = 10“-d”MYDB“