2011-12-02 3 views
2

백업 스크립트의 FOR 루프에 큰 따옴표로 묶인 입력 매개 변수 ("기본 사용자")가 사용되면 xcopy 명령 줄에서 이중 인수로 된 여분의 쌍으로 묶지 않으면 "매개 변수 개수가 잘못되었습니다" 인용 부호. 다른 명령은 추가 따옴표 없이도 작동합니다. 누군가 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 

답변

2

당신은
%%a에 문제가있어 %backupcmd% ""c:\users\%%a\desktop"" ""%drive%\%%a\desktop""
또한 그래서 당신의 문자열 당신은 %%~a 구문을 사용할 수
""c:\users\"Default User"\desktop""

처럼 보일 수, 인용 포함 할 수 있습니다, 그것은 주위의 따옴표를 제거합니다 , 그럼 당신은 사용할 수 있어야합니다
%backupcmd% "c:\users\%%~a\desktop" "%drive%\%%~a\desktop"