특정 확장자를 가진 파일 이름이 4자 이하인 파일을 새 폴더로 복사하려고 합니다. 나는 지금 몇 시간 동안 이것을 하려고 노력했습니다! 좌절감을 느낀다. 복사 명령과 와일드카드 ?를 사용했습니다. 그리고 *
답변1
AFH가 주석에서 지적했듯이 간단한 "COPY ????.ext"는 4개의 파일 이름에서 작동합니다.이하문자. DOS 기반 시스템의 glob 스타일 패턴 일치에서 *는 "0개 이상의 문자"를 의미하고 분명히 ? 0개 또는 1개의 문자를 의미합니다. 그러나 이러한 유형의 패턴 일치는 응용 프로그램 수준에서 수행된다는 점을 이해해야 합니다. 즉, Windows(및 해당 문제의 경우 DOS)는 실행할 프로그램에 입력한 대로 정확하게 명령줄을 전달합니다. "????.ext"를 입력하면 COPY 명령이 보는 것과 정확히 같습니다.
un*x(bash, tcsh 등)에서와 같이 내가 작업한 다른 셸과 비교하면 명령 해석기가 먼저 모든 패턴 일치를 확장하고 전체 파일 목록을 명령에 전달합니다. 즉, 해당 쉘에서 "copy file.?"를 입력하면 쉘은 "copy file.1 file.2 file.3"을 호출하고 "copy"는 일반적으로 리터럴 "file.?"을 볼 수 없습니다. 논쟁.
(그리고 이것이 내 원래 첫 번째 대답이 잘못된 이유입니다.~ 아니다Windows의 CMD.EXE 방식을 확장하는 중입니다. 알아두어야 할 사항입니다!)
일반 Windows 콘솔/명령줄(즉,~ 아니다그런데 DOS!) 단일 명령으로 이 작업을 수행하려면 ? 및 * Windows에서 작동: ? 단일 문자와 일치하고 *는 가능한 많은 문자와 일치합니다. 개수를 지정할 수도 없습니다. 그러나 배치 파일을 사용하여 각 명령을 순서대로 실행하면 동일한 효과를 얻을 수 있습니다.
@echo off
copy "????.ext" "target folder"
copy "???.ext" "target folder"
copy "??.ext" "target folder"
copy "?.ext" "target folder"
다양한 배치 파일 기술을 사용하여 다른 파일 이름 길이에 맞게 수정하거나 다른 대상 폴더 등을 사용할 수도 있습니다.
또한 최신 Windows OS에서는 Windows 스크립트 호스트를 통해 VBScript를 사용할 수 있고, Win8에서는 강력한 정규식 등과 같은 훨씬 더 광범위한 프로그래밍 논리를 허용하는 PowerShell이 있어야 합니다.