在下面的代码中,我想要创建一个每日的文件夹,其中包含主机名以用于备份,其中日期格式应为MM.dd.yyyy
。
我使用set mydate=%date:/=%
和Echo %mydate%
来获取日期。但我得到的是 dd-MM-yyyy 格式。
由于系统格式是 dd-MM-yyyy %date%,因此没有提供所需的格式。
我的脚本到目前为止:
@echo off
REM Getting Host Name
FOR /F "usebackq" %%i IN (`hostname`) DO SET host=%%i
ECHO %host%
REM Getting System Date & Time
set mydate=%date:/=%
Echo %mydate%
set mytime=%time:~-11,2%-%time:~-8,2%-%time:~-5,2%
set mytimestamp=%mydate: =%_%mytime:.=%
echo %mytimestamp%
REM This timestamp is used to create folder System Name with date
set mynewtimestamp=%host%_%mydate: =%
echo %mynewtimestamp%
Rem Change the WINRAR Installation path & MSSQL OSQL.exe path in below statement, seperated with semicolumn.
set path=C:\Program Files\WinRAR;C:\Program Files\Microsoft SQL Server\150\Tools\Binn;C:\WINDOWS\System32;
Rem Change patch in following statement as per Required "BackupDest1" (Centrlise Location) Installation.
set BackupDest=D:\Daily_Backup\Backup\
REM CREATING BACKUP WITH RAR FORMAT
rar a -ep1 "%BackupDest%\%mytimestamp%_TEST.rar" "C:\Program Files\TEST"
REM MSSQL DB BACKUP
"osql.exe" -E -Q "BACKUP DATABASE [TEST] TO DISK='%BackupDest%\%mytimestamp%_MSSQL_TEST.bak' WITH FORMAT"
rar a -epl "%BackupDest%\%mytimestamp%_SQL_Backup.rar" "%BackupDest%*.bak"
pushd "%BackupDest%"
del *.bak
del *.reg
md %BackupDest%\%mynewtimestamp% 2>NUL
ROBOCOPY "D:\Daily_Backup\Backup" "%BackupDest%\%mynewtimestamp%" /z /MOV /MT32
答案1
使用 powershell 的一行程序即可完成此操作,省去麻烦。
是的,我知道你使用的是批处理而不是 powershell。我把有限的东西交给 powershell。从我的批处理文件中,像这样。
for /f %%a in ('powershell -Command "Get-Date -format MM.dd.yyyy"') do set datetime=%%a
这就是我解决这个问题的方法,我非常擅长批处理。当然我可以解析批处理中的命令,但为什么呢?在这种情况下,最简单的路线可能也是最好的路线。
答案2
@echo off && setlocal enabledelayedexpansion
for /f usebackq^tokens^=4delims^=^<^>. %%G in =;(`
"%__AppDir__%wbem\wmic.exe" OS Get localdatetime /format:xml ^| find "VALUE"
`);= do set "_dt=%%~G"
set "_BackupDest=D:\Daily_Backup\Backup\"
set "_Rar="c:\program files\winrar\rar.exe""
set "_osql="c:\program files\microsoft sql server\150\tools\binn\osql.exe""
set "_var=%ComputerName%_%_dt:~4,2%/%_dt:~6,2%/%_dt:~0,4%-%_dt:~8,2%-%_dt:~10,2%-%_dt:~12,2%"
%_rar% a -ep1 "%_BackupDest%\%_var%_TEST.rar" "C:\Program Files\TEST"
%_osql% -E -Q "Backup Database [Test] To Disk='%_BackupDest%\%_var%_MSSQL_Test.bak' With Format"
%_rar% a -epl "%_BckupDest%\%_var%_SQL_Backup.rar" "%_BackupDest%*.bak"
pushd "%_BackupDest%" && 2>nul =;( del *.bak *.reg & mkdir "%_BackupDest%\%_var%"
Robocopy "D:\Daily_Backup\Backup" "%_BackupDest%\%_var%" /z /mov /mt32
);= & popd & endlocal
1.将获取日期和时间的命令更改为不会因用户设置、自定义、语言等而发生变化的命令...并编写与所需布局相关的子字符串
2.ComputerName 不使用循环返回主机名,这最终只会使代码复杂化,而无法得到相同的结果
3.不要使用路径名作为变量名,您可以使用命令自定义而不会弄乱系统变量(仅推荐)
4.记录代码很有帮助,但是您的代码对于相同的操作有很多注释,请总结您的命令和注释。