Почему xcopy требует нескольких кавычек? - PullRequest
2 голосов
/ 02 декабря 2011

Когда цикл FOR в моем сценарии резервного копирования использует входной параметр, заключенный в двойные кавычки («Пользователь по умолчанию»), я получаю сообщение об ошибке «Недопустимое количество параметров» в командной строке xcopy, если не добавлю его с дополнительной парой двойных -цитаты. Другие команды работают нормально без лишних кавычек. Может кто-нибудь объяснить, почему xcopy ведет себя так, и если есть обходной путь, который позволяет избежать лишних кавычек? Спасибо.

@echo off
setlocal
set drive=O:\Backups\test
set backupcmd=xcopy /s /c /d /e /i /r /y

if exist "c:\users" goto startvis7
if exist "c:\documents and settings\" goto startxp

:startxp
for %%a in ("Default User" Owner) do (
if exist "c:\documents and settings\%%a" (
echo ### Backing up desktop for %%a...
%backupcmd% ""c:\documents and settings\%%a\desktop"" ""%drive%\%%a\desktop""
) else (echo ### Account %%a not found.)
)
goto eof

:startvis7
for %%a in ("Default User" Owner) do (
if exist "c:\users\%%a" (
echo ### Backing up desktop for %%a...
%backupcmd% ""c:\users\%%a\desktop"" ""%drive%\%%a\desktop""
) else (echo ### Account %%a not found.)
)
:eof
echo Backup Complete!
@pause
endlocal

1 Ответ

2 голосов
/ 02 декабря 2011

У вас проблема с %%a в
%backupcmd% ""c:\users\%%a\desktop"" ""%drive%\%%a\desktop""
. Она также может содержать кавычки, поэтому ваша строка может выглядеть как
""c:\users\"Default User"\desktop""

. Вы можете использовать%%~a синтаксис, он удаляет окружающие кавычки, тогда вы сможете использовать
%backupcmd% "c:\users\%%~a\desktop" "%drive%\%%~a\desktop"

...