robocopy - ERROR : No Destination Directory Specified.
robocopy를 실행할 때 다음과 같은 식으로 실행하면,
c:\> robocopy "c:\temp\" d:\temp test.dll
"ERROR : No Destination Directory Specified." 오류 메시지가 발생합니다. 이상하죠? robocopy는 대상 디렉터리가 없으면 만들기 때문에 저런 오류가 발생할 이유가 없습니다. 실제 원인은 robocopy의 출력을 자세하게 봐야 합니다.
C:\> robocopy "c:\temp\" d:\temp test.dll
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : 03 12월 2020 오전 10:30:48
Source : c:\temp" d:\temp test.dll\
Dest -
Files : *.*
Options : *.* /DCOPY:DA /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
ERROR : No Destination Directory Specified.
Simple Usage :: ROBOCOPY source destination /MIR
source :: Source Directory (drive:\path or \\server\share\path).
destination :: Destination Dir (drive:\path or \\server\share\path).
/MIR :: Mirror a complete directory tree.
For more usage information run ROBOCOPY /?
**** /MIR can DELETE files as well as copy them !
보는 바와 같이 "Source" 디렉터리로 지정된 값이,
c:\temp" d:\temp test.dll\
독특합니다. 그 이유는 robocopy의 인자에 전달한 소스 경로의 마지막에 붙은 '\' 문자 때문입니다.
"c:\temp\"
robocopy는 일반적으로 '\' 문자를 escape 용도로 사용하지 않는데, 유독 마지막 경로에 붙은 글자에 대해서는 escape 용도로 쓰여서 그다음의 겹따옴표를 구분자가 아닌 문자열의 일부로 받아들이게 만듭니다. 그래서 토큰 파싱 작업에서 첫 번째 인자를 둘러싼 겹따옴표의 마지막 구분자가 사라져서 이후의 문자열 끝까지를 묶어 처리해 버린 것입니다.
결국 "Dest"에 해당하는 인자는 비어있게 되고 "ERROR : No Destination Directory Specified." 오류가 자연스럽게 발생합니다.
따라서 해결 방법은 상황에 따라 3가지로 나뉩니다.
1) 경로의 마지막에 있는 '\' 문자를 제거하거나,
robocopy "c:\temp" d:\temp test.dll
2) 마지막에 꼭 '\' 문자를 넣어야 한다면 escape 용도로 사용되지 않게 두 번을 연속 기재하거나,
robocopy "c:\temp\\" d:\temp test.dll
3) 겹따옴표를 떼어내는 식으로 처리하면 됩니다.
robocopy c:\temp\ d:\temp test.dll
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]