命令提示回显日期 returns 无
Command Prompt echo date returns nothing
我有一个 batch/sql 脚本对用于备份数据库。我最近进入文件夹以取回数据库,但发现它无法正常工作。我检查了我的批处理脚本,它没有告诉我日期或月份,但年份显示为 'on'!我的 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
他们打算备份到一个以当前日期命名的目录,但它是通过 --on?!
我自己和 @aschipfl 设法解决了它,我认为它崩溃的原因是我重新分配了一个系统变量。我所要做的就是在 SQL 中使用 DATE CONVERT 格式 6 并在 cmd 中使用 %date% 变量。那解决了它,我现在有了 dd-MMM-yy 的格式。
我有一个 batch/sql 脚本对用于备份数据库。我最近进入文件夹以取回数据库,但发现它无法正常工作。我检查了我的批处理脚本,它没有告诉我日期或月份,但年份显示为 'on'!我的 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
他们打算备份到一个以当前日期命名的目录,但它是通过 --on?!
我自己和 @aschipfl 设法解决了它,我认为它崩溃的原因是我重新分配了一个系统变量。我所要做的就是在 SQL 中使用 DATE CONVERT 格式 6 并在 cmd 中使用 %date% 变量。那解决了它,我现在有了 dd-MMM-yy 的格式。