저는 배치 파일 프로그래밍이 처음이고 회사의 이전 개발자가 구현한 기존 배치 파일을 분석하고 있습니다. 그래서 나는 그가 무엇을 하려고 했는지 알아내려고 노력하고 있습니다. 다음 명령이 있습니다.
for /r %x in (\\Server6\doc_production\*38316468*) do ren "%x" /y \\Server6\doc_production\error\
나는 이것이 주어진 경로를 통해 재귀적으로 이동해야 하는 루프 명령이라는 것을 알고 있습니다. 그러나 내가 모르는 부분이 있습니다.
/y 매개변수의 용도는 무엇입니까? 인터넷 검색으로는 아무것도 찾을 수 없었습니다.
이 명령은 정확히 무엇을 하는 걸까요?
업데이트: 답장을 보내 주셔서 감사합니다. 많은 사람들은 이 명령이 패턴과 일치하는 파일을 오류 하위 폴더로 이동할 것이라고 말했습니다. 그래서 로컬 컴퓨터에서 테스트해 보았습니다. 다음 디렉터리를 만들었습니다.
C:
├──test
│ └──error
그리고 테스트 폴더에 38316468.sql 파일을 삽입했습니다.
그런 다음 다음 명령을 실행했습니다.
for /r %x in (C:\doc_production\*38316468*) do ren "%x" /y C:\doc_production\error\
하지만 아무 일도 일어나지 않습니다. 오류 메시지 없이 명령이 실행됩니다. 구문 오류가 없습니다. 그러나 그것은 아무것도 하지 않습니다. 파일을 이동하지 않으며 파일 이름을 바꾸지도 않습니다. 왜 이런가요?
답변1
그것은 나에게 유효하지 않은 것 같습니다.
RENAME(REN)에는 /y 매개변수가 없으며 두 번째 매개변수가 파일 이름이어야 합니다(여기서는 폴더가 아님).
MOVE에는 "/y"가 있습니다. 이는 '대상이 이미 존재하고 내가 "예"라고 대답했다고 가정할 때 "확실합니까?"라는 질문으로 나를 귀찮게 하지 마십시오'를 의미하며 폴더를 두 번째 매개변수로 사용해도 괜찮습니다.
그러나 MOVE의 경우 /Y는 MOVE 명령 바로 뒤와 매개변수 앞에 나타나야 합니다. REN을 MOVE로 바꾸면 여전히 구문 오류입니다.
어쨌든: FOR 명령은 패턴과 일치하는 모든 파일 목록(하위 디렉터리를 검색함)을 생성합니다.38316468그런 다음 각 일치 항목에 대해 차례로 REN을 호출합니다. REN(MOVE여야 함)은 각 파일의 이름을 오류 폴더로 변경(이동)하려고 시도합니다.
그러나 MOVE에서는 /Y를 사용하는 것이 여전히 잘못되었습니다.
오류가 발생하는 또 다른 문제는 FOR가 작동하는 소스 폴더의 하위 폴더입니다. 이로 인해 명령이 파일을 자체적으로 이동하려고 시도합니다. (예: 오류 폴더에서 오류 폴더로.) 이는 FOR 명령을 다시 사용하기 전에 나중에 오류 폴더가 지워지는지에 따라 문제가 될 수도 있고 그렇지 않을 수도 있습니다.
마지막으로 중요한 사항: 주의 사항:
배치 파일에서 %X 변수를 사용하려면 %를 %%X로 두 배로 늘려야 합니다. 명령줄에서는 단일 %를 사용할 수 있습니다. 그리고 %X 변수는 대소문자를 구분하므로 %X와 %x는 같은 것이 아닙니다.
답변2
그것이 무엇을 하는지 배울 수 있도록 그것을 분석해 봅시다.
for /r %x
이 명령은 path에서 시작하는 폴더 트리를 따라 이동 \\Server6\doc_production\*38316468*
하고 일치하는 각 파일에 대해 DO 문을 실행합니다.
명령에서 DO
또는 작업은 ren
이름 바꾸기를 위한 것입니다.
그러면 /y
대상에 이미 존재하는 소스의 파일을 덮어쓸 것인지 묻는 명령 프롬프트가 중지됩니다.
첫 번째 디렉터리에서 와일드카드 번호를 찾는 것처럼 보이며 이름을 바꾸고 /error/ 폴더에 동영상을 저장하지만 실제로 작동하게 만드는 파일 이름은 없습니다. 이 명령이 올바르게 작동하려면 /error/ 폴더 뒤에 파일 이름을 지정해야 합니다.