2016-09-15 5 views
0

현재 한 폴더에서 폴더로 폴더 만 이동하는 작업을하고 있습니다. 내가 만든 bacth 파일은 다음과 같습니다.일괄 처리를 사용하여 30 일 된 폴더를 일괄 처리로 이동

Set /p target=Select Target Destination: 
ForFiles /P "C:\Batch test" /D -4 /C "CMD /C if @ISDIR==TRUE echo Move @FILE %target%" &Move @File %target% 
pause 

문제는 "C : \ Move Test"와 같은 공간이있는 대상 디렉토리를 사용하는 것입니다. 이름에 공백이있는 다른 디렉토리로 폴더를 이동하는 방법이 있는지 궁금합니다.

답변

0

당신은 자신의 16 진수 0x22에 따옴표를 대체 할 수

ForFiles /P "C:\Batch test" /D -4 /C "CMD /C if @ISDIR==TRUE (echo Move @FILE 0x22%target%0x22 & Move @File 0x22%target%0x22)" 

당신도 그들을 대체 할 수있는 다른 문자에 문제를 얻는 경우에; 0x26 = &, 0x28을 = (0x29 = ).

0

명령 줄 몇 가지 실수가 아주 이상한 모양 : 뭐가 문제

ForFiles /P "C:\Batch test" /D -4 /C "CMD /C if @ISDIR==TRUE echo Move @FILE %target%" &Move @File %target% 

: /D -30이 있었지만

  • , 당신은 나이가 약 30 일을 이야기하고 있지만 /D -4를 지정 옳은; /D은 생성 일이 아닌 최종 수정일을 확인합니다.
  • (첫 번째) move 명령 앞에 echo이 있으므로 실행되지 않고 move 명령이 표시됩니다. 그것을 피하려면 단순히 echo을 제거하십시오. 그것은 forfiles /C 부의 닫는 따옴표 뒤에 표시하고
  • forfiles 후 제 move 명령 거기의 커멘드를 연결 연산자 & 뒤에; 이것은 forfiles의 범위를 완전히 벗어 났으므로 @file을 문자 그대로 처리했습니다. 앰퍼샌드 및 고아 인 move 명령을 제거해야합니다.
  • 실제 질문에 대답 : 공백 (또는 다른 특수 문자)이 파일/디렉토리 경로에 나타나는 문제를 해결하려면 주위에 따옴표를 넣으십시오. 그러나 : 이미 인용 된 forfiles /C 다음에 해당 부분이 명령 문자열 내에 나타나기 때문에 ""을 단순히 사용할 수 없으므로 이스케이프 처리해야합니다. 0x22를 사용하여 \"를 사용하여 1, 2. (, 당신은 코드 0x22" 문자를 나타내는 형식 0xHH에서 16 진수 코드로 문자를 지정할 수 있습니다 forfiles /? 도움에 따라) : 두 forfiles의 옵션이 있습니다 변형 1에서 옵션 2를 강력히 추천합니다.\" 이스케이프 (해당 이스케이프 문자는 ^)에 익숙하지 않으므로 cmd 명령 인터프리터에 영향을 줄 수있는 " 문자가 계속 표시됩니다.

따라서 수정 된 명령 줄은 다음과 같습니다 완성도를 위해서

ForFiles /P "C:\Batch test" /D -30 /C "CMD /C if @ISDIR==TRUE Move @FILE 0x22%target%0x22" 

,이 옵션 1. 같을 것이다 방법입니다

ForFiles /P "C:\Batch test" /D -30 /C "CMD /C if @ISDIR==TRUE Move @FILE \"%target%\"" 

주 당신을 @FILE (모든 경로 관련 @ 스타일 변수와 마찬가지로)이 이미 인용 된 문자열로 확장되므로 여기에서 소스를 인용 할 필요가 없습니다.

관련 문제