2014-01-27 2 views
1

내가 좋아하는 일을 포함하는 텍스트 파일이 컨테이너를 디렉토리의 새 디렉토리에 추가하지만 지정한 파일과 상위 폴더 구조 만 삭제합니다. 내 배치에서For 루프 배치 폴더 이름에서 제거 파일

그러나

for /f "delims=" %%a in (C:\audit\test.txt) do (
    robocopy "%%~dpa" "Z:\" "%%~nxa" /E /COPY:DAT /PURGE /MIR /R:1000000 /W:30 
) 
pause 

, 그것은 아마 후행 백 슬래시하려면 ROBOCOPY를 실패합니다. 소스가 섞여서 폴더와 Z :가 모두 표시됩니다. 즉, %%~nxa의 파일 이름은 복사 할 파일이 아닌 대상의 일부입니다. 어떤 아이디어?

+0

알려주십시오 경우 : \ 감사 \ test.txt라는 라인이 쌍 따옴표로 sorounded입니까? –

+0

예 ""인용되어 있습니다. – PnP

답변

2

: 당신이 파일 경로에 공백 및/또는 특수 기호를 사용하는 경우

for /f "tokens=* delims=" %%a in (C:\audit\test.txt) do (
    robocopy %%~dpa "Z:\" "%%~nxa" /E /PURGE /MIR 
) 
pause 

, 당신은 taht를 아래의 코드를 시도 할 수 있습니다 복사 '명령을 사용하여 이 경우 백 슬래시는 바로 닫기 " 앞에 오기 때문에 이스케이프 문자로 처리됩니다. .을 경로에 추가하면 결과는 동일한 경로가되지만 백 슬래시는 더 이상 닫는 자리보다 앞에 있지 않으므로 끝 인용에 대한 이스케이프 문자로 처리되지 않습니다.

소스와 대상 경로 모두를 게시 한 예에서는 \으로 끝납니다. 따라서 당신은 모두에 .을 추가해야합니다 : C

for /f "delims=" %%a in (C:\audit\test.txt) do (
    robocopy "%%~dpa." "Z:\." "%%~nxa" /E /COPY:DAT /PURGE /MIR /R:1000000 /W:30 
) 
pause 
0

/MIR은 test.txt에 파일 이름이없는 디렉토리까지도 디렉토리 구조를 반복적으로 복사합니다. 첫 번째 매개 변수에는 큰 따옴표를 사용하지 마십시오. /R : 1000000/W : 30/COPY : DAT는 기본값이므로 tehm을 명시 적으로 설정할 필요가 없습니다.

folowing 코드를 시도하십시오 :

@echo off 
for /f "tokens=* delims=" %%a in (C:\audit\test.txt) do (
    if not exist "Z:\%%~pa" mkdir "Z:\%%~pa" 
    copy /Y "%%~a" "Z:\%%~pnxa" 
) 
+0

경로에 특수 문자 나 공백이없는 경우에만 문제가 해결 될 수 있습니다. –

+0

파일 경로가 인용되어 있으므로 (기사 설명에서 언급했듯이) 공백이 두려워지지 않습니다. 스페이서 문자 - 아마도 예. 사용자가 특수 문자가있는 파일을 사용하지 않는다면 걱정하지 않아도됩니다. –

+0

물결표'~'는 따옴표를 제거하게하므로 경로에 공백이있을 경우 따옴표가없는'%% ~ dpa'는 두 개 (또는 그 이상의) 매개 변수로 취급됩니다. –