为什么我的变量在 delayedexpansion for 循环中没有保持设置? (命令提示符/cmd.exe)
Why dont my variables within a delayedexpansion for loop stay set? (Command Prompt / cmd.exe)
为什么我在下面的 delayedexpansion 循环脚本中的变量没有保持设置?
setlocal enabledelayedexpansion
set DB_LIST=(DB1 DB2)
for %%i in %DB_LIST% do (
set DATABASENAME=%%i
echo -- Backing Up Database %DATABASENAME% --
set DATESTAMP=%DATE:~-4%.%DATE:~3,2%.%DATE:~0,2%
set BACKUPFILENAME=F:\Backups\ScheduledBackups\%DATABASENAME%-%DATESTAMP%.bak
echo.
sqlcmd -E -S LiveDB2 -d master -Q "BACKUP DATABASE [%DATABASENAME%] TO DISK = '%BACKUPFILENAME%' WITH DESCRIPTION = 'Full backup [%DATABASENAME%]', CHECKSUM, INIT, COMPRESSION, STATS"
)
endlocal
pause
我收到一个尝试使用 BACKUP DATABASE DB1 TO DISK = ''
执行的命令
谢谢!
那是因为您试图使用百分号而不是感叹号来扩展变量。启用延迟扩展后,您必须始终在 for
循环中使用感叹号。
试试这个:
setlocal enabledelayedexpansion
set DB_LIST=(DB1 DB2)
for %%i in %DB_LIST% do (
set DATABASENAME=%%i
echo -- Backing Up Database !DATABASENAME! --
set DATESTAMP=%DATE:~-4%.%DATE:~3,2%.%DATE:~0,2%
set BACKUPFILENAME=F:\Backups\ScheduledBackups\!DATABASENAME!-!DATESTAMP!.bak
echo.
sqlcmd -E -S LiveDB2 -d master -Q "BACKUP DATABASE [!DATABASENAME!] TO DISK = '!BACKUPFILENAME!' WITH DESCRIPTION = 'Full backup [!DATABASENAME!]',
CHECKSUM, INIT, COMPRESSION, STATS")
endlocal
pause
为什么我在下面的 delayedexpansion 循环脚本中的变量没有保持设置?
setlocal enabledelayedexpansion
set DB_LIST=(DB1 DB2)
for %%i in %DB_LIST% do (
set DATABASENAME=%%i
echo -- Backing Up Database %DATABASENAME% --
set DATESTAMP=%DATE:~-4%.%DATE:~3,2%.%DATE:~0,2%
set BACKUPFILENAME=F:\Backups\ScheduledBackups\%DATABASENAME%-%DATESTAMP%.bak
echo.
sqlcmd -E -S LiveDB2 -d master -Q "BACKUP DATABASE [%DATABASENAME%] TO DISK = '%BACKUPFILENAME%' WITH DESCRIPTION = 'Full backup [%DATABASENAME%]', CHECKSUM, INIT, COMPRESSION, STATS"
)
endlocal
pause
我收到一个尝试使用 BACKUP DATABASE DB1 TO DISK = ''
谢谢!
那是因为您试图使用百分号而不是感叹号来扩展变量。启用延迟扩展后,您必须始终在 for
循环中使用感叹号。
试试这个:
setlocal enabledelayedexpansion
set DB_LIST=(DB1 DB2)
for %%i in %DB_LIST% do (
set DATABASENAME=%%i
echo -- Backing Up Database !DATABASENAME! --
set DATESTAMP=%DATE:~-4%.%DATE:~3,2%.%DATE:~0,2%
set BACKUPFILENAME=F:\Backups\ScheduledBackups\!DATABASENAME!-!DATESTAMP!.bak
echo.
sqlcmd -E -S LiveDB2 -d master -Q "BACKUP DATABASE [!DATABASENAME!] TO DISK = '!BACKUPFILENAME!' WITH DESCRIPTION = 'Full backup [!DATABASENAME!]',
CHECKSUM, INIT, COMPRESSION, STATS")
endlocal
pause