如何用&设置环境变量

时间:2017-01-18 16:33:39

标签: batch-file

所以我写了一个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"

3 个答案:

答案 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%"