2016-03-08 5 views
0

У меня есть пара скриптов пакет/sql, используемый для резервного копирования баз данных. Недавно я зашел в папку, чтобы получить обратно db, и я увидел, что он не работает. Я проверил свой пакетный скрипт, и это не значит, что я день или месяц, но год появляется как «включено»! Мой SQL-скрипт работает нормально, и я хочу добавить, что мой пакетный скрипт работал.Командная строка эхо-дата ничего не возвращает

Вот моя партия сценарий

FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%B 
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%B 
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B 
FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET yyyy=%%B 
SET date=%dd%-%mm%-%yyyy% 

rem day month year check 
echo %dd% 
echo %mm% 
echo %yyyy% 

echo %date% 

mkdir %date% 

sqlcmd -S .\SQLEXPRESS -i backupQuery.sql 

и вот «backupQuery.sql»

DECLARE @BackupLocation AS NVARCHAR(255) = 'C:\SQL\backups\' 

/* Set @CurrentDate to a timestamp in mmddyyyy form */ 
DECLARE @CurrentDate AS NVARCHAR(255) 

SET @CurrentDate = REPLICATE('0', 2 - LEN(CAST(DAY(GETDATE()) AS NVARCHAR))) /*day number 1*/ 

+ 

CAST(DAY(GETDATE()) AS NVARCHAR) /*day number 2*/ 

+ '-' + 

REPLICATE('0', 2 - LEN(CAST(MONTH(GETDATE()) AS NVARCHAR))) /*month number 1*/ 

+ 

CAST(MONTH(GETDATE()) AS NVARCHAR) /*month number 1*/ 

+ '-' + 

CAST(YEAR(GETDATE()) AS NVARCHAR) /*year*/ 

DECLARE @DatabaseName AS NVARCHAR(255) 

/* Get all databases except for the temporary database */ 
DECLARE Databases CURSOR FOR 
SELECT name 
FROM sys.databases 
WHERE name 
NOT IN 
('tempdb', 
'master', 
'model', 
'msdb') 

OPEN Databases 

FETCH NEXT FROM Databases 
INTO @DatabaseName 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    DECLARE @Command AS NVARCHAR(MAX) 
    SET @Command = 'BACKUP DATABASE ' + QUOTENAME(@DatabaseName) + ' TO DISK = ''' + 
     @BackupLocation + @CurrentDate + '\' + @DatabaseName + '.BAK''' 
    EXEC(@Command) 
    FETCH NEXT FROM Databases 
    INTO @DatabaseName 
END 

CLOSE Databases 
DEALLOCATE Databases 

Они предназначены для резервного копирования в папку с именем после текущей даты, но это приходит через, как - -на?!

+0

'% date%' - встроенная переменная (в 'cmd'), поэтому неплохо переписать ее! откройте новое окно 'cmd' и введите'% date% ', так что вы увидите, что он возвращает текущую дату; поэтому используйте другое имя переменной для своего кода ... – aschipfl

ответ

0

Мне и @aschipfl удалось решить эту проблему, причина, по которой это было нарушено. Я полагаю, это связано с тем, что я переназначил системную переменную. Все, что мне нужно было сделать, это использовать формат DATE CONVERT 6 в моем SQL и переменную% date% в cmd. Это решило его, и теперь у меня есть формат dd-MMM-yy.