명령줄(CMD)에서 특정 문자 수로 파일 이름 복사

명령줄(CMD)에서 특정 문자 수로 파일 이름 복사

이름이 5자인 한 폴더에 있는 모든 텍스트 파일을 복사해야 합니다. 이 명령은 나열용이라는 것을 알고 있습니다.

$ dir folder /B | findstr /R "^.....\.txt"

하지만 위 명령으로 이름이 나열된 모든 파일을 다른 폴더에 복사하고 싶습니다.

답변1

나는 (나 자신에게뿐만 아니라) 묻고 있었다"그건 간단한 일이 아닌데..."?

copy  C:\ORIG_DIR\?????.txt C:\Dest_Dir

G-Man 덕분에 테스트를 거쳤습니다.~에파워셸효과가있다, 그 사이에cmd.exe위 명령은 각 일치 항목을 최대 5자까지 복사하고 .txt.

물음표 (?)

이름의 단일 문자 대신 물음표를 사용하십시오. 예를 들어, Gloss?.doc를 입력하면 Glossy.doc 또는 Gloss1.doc 파일은 찾을 수 있지만 Glossary.doc는 찾을 수 없습니다.

참조:

답변2

이는 Batch에서 가능하지만 PowerShell에서는 쉽습니다.

ls | foreach { if (($_.BaseName.Length -eq 5) -and ($_.Extension -eq ".txt")) 
    { $_.CopyTo("\Name\Of\Target\Folder\" + $_.Name) }

정규식에 대해 파일 이름을 확인하여 이를 수행할 수도 있지만 이 방법은 잘 작동합니다.

답변3

배치에서는 다음과 같이 할 수 있습니다.

@Echo OFF

Set "targetDir=C:\Dir"

For %%# In ("*.txt") DO (

    (Echo "%%~nx#" | findstr /R "^......\.")1>Nul 2>&1 && (

        Echo Copying "%%~nx#" ...
        (Copy /Y "%%~f#" "%targetDir%\%%~nx#")1>NUL

    )
)

Pause&Exit /B 0

답변4

또 다른 일괄 접근 방식은 다음과 같습니다.

@에코 꺼짐
setlocal 활성화 지연확장
(*.txt)의 %%f에 대해 do (
      foo=%%f 설정
      foo=!foo:~5,5!를 설정하세요!
      if !foo!==.txt (
            (이 파일 이름(%%에프) 패턴과 일치합니다.????.txt; 그걸로 네가 원하는 대로 해라.)
      )
)

!foo:~5,5!부분 문자열 메커니즘 의 인스턴스 입니다 . 6번째 문자(오프셋 5)에서 시작하여 길이가 5인 파일 이름의 하위 문자열을 추출합니다( 더 많은 경우 한 문자를 더 캡처하기에 충분함). 따라서 변수는 파일 이름의 6, 7, 8, 9번째 문자가 , , , 이고 10번째 문자가 없으면 값을 갖습니다 .!variable:~offset:length!.txtfoo.txt.txt

관련 정보