所以我写了一个bat文件,我遇到了设置包含&的变量的问题。在文件路径中。
现在这可行,但我无法在复制命令中使用%SOURCE%或%DEST%变量。我收到一个错误。因此我在复制命令中写出完整路径的原因。
@echo off
echo Backing Up Build Files ^& Templates
echo.
:: do a dump of repo
echo Creating Dump File
svnadmin dump "Z:\Subversion\Build Files "^&" Templates" > "Z:\Subversion\Build Files "^&" Templates_repository-backup.dmp"
:: copy dump file to backup location
set YEAR=%date:~10,4%
set MONTH=%date:~4,2%
set DAY=%date:~7,2%
set THE_DATE=%MONTH%_%DAY%_%YEAR%
set SPACE_CHECK=%time:~0,1%
if "%SPACE_CHECK%"==" " goto handlehourspace
set HOURS=%time:~0,2%
goto hourdone
:handlehourspace
set HOURS=0%time:~1,1%
:hourdone
set MINUTES=%time:~3,2%
set SECONDS=%time:~6,2%
set THE_TIME=%HOURS%_%MINUTES%_%SECONDS%
set SOURCE="Z:\Subversion\Build Files "^&" Templates_repository-backup.dmp"
set DEST="K:\IETM_Repo_Backup\Build Files "^&" Templates\Build Files "^&" Templates_repository-backup.dmp"_%THE_DATE%_%THE_TIME%
echo Copying Dump File
copy /Z "Z:\Subversion\Build Files "^&" Templates_repository-backup.dmp" "K:\IETM_Repo_Backup\Build Files "^&" Templates\Build Files "^&" Templates_repository-backup.dmp"_%THE_DATE%_%THE_TIME%
echo Deleting Original Dump File
del "Z:\Subversion\Build Files "^&" Templates_repository-backup.dmp"
答案 0 :(得分:3)
使用以下语法:set "var=value"
能够在值中使用特殊字符:
set "x=this&that"
echo "%x%"
REM create a file:
break>"%x%"
dir this*
REM remove the file:
del "%x%"
答案 1 :(得分:1)
使用您的样式set DEST="K:\...."
,引号是内容的一部分。使用扩展的 SET-syntax set "DEST=K:\...."
,它们会转义字符串但不是字符串的一部分。
在大多数情况下,您应该使用扩展语法
set "SOURCE=Z:\Subversion\Build Files & Templates_repository-backup.dmp"
set "DEST=K:\IETM_Repo_Backup\Build Files & Templates\Build Files & Templates_repository-backup.dmp_%THE_DATE%_%THE_TIME%"
copy /Z "%SOURCE%" "%DEST%"
在copy "%SOURCE%" ...
行中,引号必须再次转义&符号和空格。
答案 2 :(得分:1)
要使用区域设置独立的方式来格式化我建议使用WMI的日期/时间 当扩展名仍然是文件名的最后一部分而不是日期/时间戳时,转储文件的备份可以更好地使用。
@echo off
echo Backing Up Build Files ^& Templates
echo.
:: get datetime string of the format yyyyMMddhhnnss.
for /f "tokens=1-3 delims=.+-" %%A in (
'wmic os get LocalDateTime^|findstr ^^[0-9]'
) do Set _DT=%%A
set THE_DATE=%_DT:~4,2%_%_DT:~6,2%_%_DT:~0,4%
set THE_TIME=%_DT:~8,2%_%_DT:~10,2%_%_DT:~12,2%
:: do a dump of repo
echo Creating Dump File
set "BFT=Build Files & Templates"
set "svnBFT=Z:\Subversion\%BFT%"
set "svnSRC=%svnBFT%_repository-backup.dmp"
svnadmin dump "%svnBFT%" > "%svnSRC%"
:: copy dump file to backup location
echo Copying Dump File
set "DEST=K:\IETM_Repo_Backup\%BFT%\%BFT%_repository-backup_%THE_DATE%_%THE_TIME%.dmp"
copy /Z "%svnSRC%" "%Dest%"
echo Deleting Original Dump File
del "%svnSRC%"