폴더에서 일치하는 표현식 파일 이름을 가져오는 배치 스크립트

폴더에서 일치하는 표현식 파일 이름을 가져오는 배치 스크립트

배치 스크립트를 사용하여 폴더 안으로 이동하면 해당 폴더에 다음과 같은 다른 파일이 있습니다.

ABc.txt
Pqr.png
.
.
Test-1.2.0.zip

Test이 파일 중에서 .로 시작 하고 확장자를 갖는 파일 이름을 얻고 싶습니다 .zip. 이 경우 Test-1.2.0.zip. 버전이 동적일 수 있기 때문입니다.

Test-1.2.0.zip출력을 찾고 반환하는 배치 스크립트를 도와 주시겠습니까 ?

답변1

시작 표시줄의 Windows 로고를 마우스 오른쪽 버튼으로 클릭하여 목록에서 "실행"을 선택하고 엽니다. 그런 다음 "최근"이라는 단어를 쓰고 확인을 클릭하세요. 노트북에 최근 폴더가 열리며 해당 폴더에서 파일을 검색해 보세요.

답변2

다음과 함께 루프 를 사용해 보세요 For /F.

where .:Strings/Characters+Wildcard+String/Characters

명령 은 Regex 1 숫자/문자가 아닌 리터럴 문자로 where가정합니다 ."."

1 Digit/character          <==>  ? 
1 or More Digit/Character  <==>  *
Test-  1 Digit/Character . 1 Digit/Character . 1 Digit/Character.zip        <==> Test-?.?.?.zip
Test-  1 Digit/Character . 1 Digit/Character . 1 or More Digit/Character:   <==> Test-?.?.*.zip
  • (For /F​​%%~nxiN아메엑스긴장)
@echo off 

for /f useback^tokens^=* %%i in (`where .:"Test-?.?.?.zip"`)do echo\%%~nxi
  • 파워셸의 경우:
Get-ChildItem -File '*.zip'| Where-Object {$_.Name -like 'Test-?.?.?.zip'} | Select-Object -ExpandProperty Name


# Or..
ls -af '*.zip'| ? {$_.Name -like 'Test-?.?.?.zip'} |select -Exp Name
  • 결과:
Test-1.2.0.zip
Test-1.2.1.zip
Test-1.2.2.zip
Test-1.2.3.zip
Test-1.2.4.zip
Test-1.2.5.zip
Test-1.2.6.zip
Test-1.2.7.zip
Test-1.2.8.zip
Test-1.2.9.zip
for /f useback^tokens^=* %%i in (`where .:"Test-?.?.*.zip"`)do echo\%%~nxi
  • 파워셸의 경우:
Get-ChildItem -File '*.zip'| Where-Object {$_.Name -like 'Test-?.?.*.zip'} | Select-Object -ExpandProperty Name


# Or..
ls -af '*.zip'| ? {$_.Name -like 'Test-?.?.*.zip'} |select -Exp Name
  • 결과:
Test-1.2.0.zip
Test-1.2.1.zip
Test-1.2.10.zip
Test-1.2.11.zip
Test-1.2.12.zip
Test-1.2.13.zip
Test-1.2.14.zip
Test-1.2.15.zip
Test-1.2.16.zip
Test-1.2.17.zip
Test-1.2.18.zip
Test-1.2.19.zip
Test-1.2.2.zip
Test-1.2.20.zip
Test-1.2.3.zip
Test-1.2.4.zip
Test-1.2.5.zip
Test-1.2.6.zip
Test-1.2.7.zip
Test-1.2.8.zip
Test-1.2.9.zip

  • 을 위한아르 자형반대종류PowerShell 추가를 위해 cmd/bat 코드에서 사용for ... ^| Sort /r`) do ...| Sort-Object -Descending
for /f useback^tokens^=* %%i in (`where .:"Test-?.?.*.zip"^|sort /r`)do echo\%%~nxi
  • 파워셸의 경우:
Get-ChildItem -File '*.zip'| Where-Object {$_.Name -like 'Test-?.?.*.zip'} | Select-Object -ExpandProperty Name | Sort-Object -Descending


# Or..
ls -af '*.zip'| ? {$_.Name -like 'Test-?.?.*.zip'} |select -Exp Name | Sort -Des
  • 결과:
Test-1.2.9.zip
Test-1.2.8.zip
Test-1.2.7.zip
Test-1.2.6.zip
Test-1.2.5.zip
Test-1.2.4.zip
Test-1.2.3.zip
Test-1.2.20.zip
Test-1.2.2.zip
Test-1.2.19.zip
Test-1.2.18.zip
Test-1.2.17.zip
Test-1.2.16.zip
Test-1.2.15.zip
Test-1.2.14.zip
Test-1.2.13.zip
Test-1.2.12.zip
Test-1.2.11.zip
Test-1.2.10.zip
Test-1.2.1.zip
Test-1.2.0.zip


답변3

@echo off

for /f useback^tokens^=* %%i in (`where .:"temp-?.?.*.tar.gz"`)do echo\%%~nxi

이 솔루션은 배치 스크립트에서 저에게 효과적이었습니다.

?1자리/문자를 나타냅니다.별(*)char은 1개 이상의 숫자/문자를 나타냅니다.

관련 정보