2017-01-18 222 views
1

因此,我有一個我寫的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" 

回答

1

有了自己的風格set DEST="K:\...."的報價是內容的一部分。使用擴展的SET語法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%" ...線的報價都需要再次逃脫&符號和空格。

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

要必須格式化我建議使用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%" 
+0

'for/f「tokens = 2 delims ==。」 %% a in('wmic os get localdatetime/value')do set _DT = %% a' – Stephan

+0

@Stephan同樣的結果,我的版本允許按需使用小數秒和UTC偏移量。 – LotPings

+0

如果需要,只需從分隔符中刪除點...';' – Stephan