여러 폴더에 존재하는 여러 파일에 대해 명령을 실행하는 방법을 찾으려고 합니다. 내가 이해한 바에 따르면 for
루프는 CMD에서 이 작업을 수행하는 가장 좋은 방법입니다(저는 Windows를 사용하고 있습니다.). 하지만 몇 가지 문제가 발생하고 있으므로 수행해야 하는 작업 중 하나를 예로 사용하겠습니다.
이 특정 명령의 경우 여러 폴더 내에 여러 파일에 대한 폴더를 만들려고 합니다. 시각적인 내용은 다음과 같습니다.
Folder A
File 1.avi
File 2.avi
Folder B
File 3.avi
File 4.avi
여기저기 검색을 해보니 다음과 같은 명령이 나왔습니다.
for /f "delims=*" %a in ('dir *.avi /b /s') do md "%~na"
내가 함께 스크랩한 것여기. 이것은 거의 맞습니다. 여러 폴더에 포함된 각 파일에 대한 폴더를 만듭니다. 문제는 새 폴더를 파일과 동일한 폴더에 포함해야 한다는 것입니다. 이 특정 명령은 새 폴더를 폴더 내부가 아닌 원래 폴더와 같은 위치에 배치합니다.
누구든지 어떤 아이디어가 있습니까? 어떤 도움이라도 주시면 감사하겠습니다. 감사합니다.
답변1
표준 디버깅 기술은
echo
명령을 스크립트에 삽입하고 복합/복잡한 명령까지 삽입하는 것입니다. 만약 당신이for /f "delims=*" %a in ('dir *.avi /b /s') do @echo md "%~na"
당신은 출력을 얻을 것이다
"file 1" "file 2" "file 3" "file 4"
노트:
- 그만큼
@
echo
명령을 방지합니다그들 자신표시되지 않으므로 해당 출력만 볼 수 있습니다. "delims=…"
for
명령 의 출력 줄을 구문 분석하는 방법을 알려줍니다dir *.avi /b /s
. 당신이 링크한 답변이 왜 제안하는지 모르겠습니다"delims=*"
. 그러나 기본 동작은 공백에서 줄을 나누는 것입니다. 따라서 디렉터리 및/또는 파일 이름에 공백이 포함되어 있는 경우(표시한 대로)"delims="
이 작업을 수행하려면 (구분 기호가 없음을 지정)을 사용해야 합니다.
- 그만큼
for /?
또는 를 입력하면help for
해당 명령에 대한 문서가 표시됩니다for
. 다섯 번째 페이지 아래에 보면In addition, substitution of FOR variable references has been enhanced. You can now use the following optional syntax: %~I - expands %I removing any surrounding quotes (") ︙ %~pI - expands %I to a path only %~nI - expands %I to a file name only ︙ The modifiers can be combined to get compound results … ︙
전체
%~na
이름 이 . 이제 시도해 보세요*.avi
%a
for /f "delims=" %a in ('dir *.avi /b /s') do @echo md "%~pa"
그리고 당신은 얻을 것이다
"the_current_directory\폴더 A\" "the_current_directory\폴더 A\" "the_current_directory\폴더 B\" "the_current_directory\폴더 B\"
이를 통해 우리는 당신이 하고 싶다고 결론을 내릴 수 있습니다
for /f "delims=" %a in ('dir *.avi /b /s') do md "%~pa%~na"
아래에
file 1
및 디렉토리를 생성하고 아래 에 및 디렉토리를 생성합니다 . 그리고 @dave_thompson_085가 지적 했듯이 .file 2
Folder A
file 3
file 4
Folder B
%~pa%~na
%~pna