2017-01-18 6 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') установить _DT = %% a' – Stephan

+0

@Stephan Тот же результат, моя версия позволяет использовать доли секунд и смещение UTC по требованию. – LotPings

+0

при необходимости просто удалите точку из разделителей ... ';)' – Stephan

Смежные вопросы