이름이 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!
.txt
foo
.txt
.
t
x
t