对于我的公司,我开发了一个小的.bat脚本,我用它备份Sqlserver数据库,并对生成的备份文件执行一些操作。目前该脚本工作正常,但我需要添加日期的备份文件名。例如,现在我有Bck_DBTest
文件,我想Bck_DBTest_yyyy_mm_dd
我已经尝试了各种方法,但从来没有能够追加日期的文件名。
你有什么建议或建议如何实现这一目标吗?
先谢谢你了
- 我的代码:
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"
set date = powershell -Command "Get-Date -Format MM-dd-yyyy"
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.zip"
powershell -Command "Compress-Archive -Path C:\Backup\db_prod\Backup_Tmp.bak -Force -DestinationPath C:\Backup\db_prod\Backup_Tmp_@date.zip"
EXIT
2条答案
按热度按时间nhhxz33t1#
set date = powershell -Command "Get-Date -Format MM-dd-yyyy"
*最好避免设置变量
date
,因为它是cmd.exe
维护的 * 动态 * 变量cmd.exe
SET
语句中, 不要用空格包围=
*,因为空格将成为变量名和/或值的一部分。cmd.exe
变量,因为你需要一个for /f
语句。C:\Backup\db_temp\Backup_TmpTest_@date.zip
date
是按预期定义的 *,则在调用powershell.exe
时,有两种方式引用在cmd.exe
中使用SET
定义的变量,Windows PowerShell CLI:cmd.exe
的预先 * 字符串插值 * 并在命令行中嵌入%date%
:-Command
(-c
)的调用中,依赖于cmd.exe
中的SET
定义的变量在PowerShell中被视为environment variables的事实,使用$env:date
(然而,这对 * 动态 *cmd.exe
变量 * 不 * 起作用):考虑到单个PowerShell CLI调用的成本(如下所述),您可以在单个调用中简单地 * 嵌套 * PowerShell命令:
退一步:
每个PowerShell CLI调用都是:
因此:
*.ps1
),您可以使用powershell.exe -File
调用它。vnzz0bqm2#
或者:将多个PowerShell语句外包到脚本文件(*.ps1),您可以使用powershell.exe -File调用该脚本文件。
mklement 0的语句意味着需要两个文件,即BATCH文件和PowerShell脚本。但也有一种方法可以将两者组合成Polyglot。
将以下代码放入扩展名为CMD的文件中,运行时,它将首先作为BATCH文件执行(运行
<#
和#>
之间的部分),BATCH将依次调用PowerShell,后者将依次加载和运行文件本身作为PowerShell脚本块。注:
"
括起来,因此它们不会执行,而是简单地显示将执行的内容。结果是以下文本行,它们表示如果删除额外的双引号和反引号,将执行的操作: