Windows 배치 스크립트 : 검색 결과 목록에서 항목 선택


1

목표 : 단일 폴더에서 특정 유형의 파일을 검색하고 싶습니다. 특정 파일 이름 패턴 (예 : "파일")으로 필터링하고 파일 이름으로 정렬하면 결과는 다음과 같습니다.

file101.txt
file212.txt
file432.txt

이제 마지막 항목 (여기서는 file432.txt) 만 선택하고 해당 파일에 대한 추가 작업 (예 : 복사 및 이름 바꾸기)을 수행 하고 싶습니다 .

어떻게해야합니까?

지금까지 내가 얻은 것은 다음과 같습니다.

@echo off
setlocal
set list=
for /r . %%g in (file*.txt) do echo %%g

.. 내 질문의 맨 위에 표시되는 목록을 제공합니다.

내가 이해하는 한 실제 목록은 없습니다. 반환 / 줄 바꿈 문자가있는 문자열 일뿐입니다. 결과적으로 특정 검색 결과 항목을 실제로 선택할 수 없습니다. 다른 for루프를 사용 했지만 EOF를 제외하고 어떤 패턴을 필터링할지 정확히 알지 못합니다. 내가 가진 유일한 아이디어는 모든 줄 바꿈 문자를 제거하고 결과를 변수에 저장하는 것입니다. 이제 발견 된 모든 새 줄은 이전 줄을 덮어 씁니다.

어떻게해야합니까?

set lastitem=for %%g in (%list%) do REMOVE_NEWLINE and echo %%g

또 다른 질문 은 명령 스위치를 수정하면 비슷한 솔루션 입니다. 가능한 정렬 순서 값을 읽으십시오 . /Odirdir /?
JosefZ

Jim,이 /R옵션이 하위 폴더로 들어가는 데 사용 된다는 것을 알고 싶습니다 . 따라서 실행하는 동안 액세스하는 각 폴더마다 파일이 정렬되므로 수락해야합니다. 모든 것은 폴더와 파일 이름에 따라 알파벳순으로 출력됩니다. 이 코드는 모든 파일의 파일 이름 구조가 동일한 경우에만 작동합니다. 파일 이름에 숫자가 많거나 적은 경우 가장 큰 숫자 인 파일 이름을 얻거나 얻지 못할 수 있습니다.
Squashman

@Squashman, 나는 그 세부 사항을 알지 못했지만 실제로 설명 된 매우 구체적인 제한으로 인해 예상대로 작동했습니다 (따라서 대답을 받아 들였습니다). 이 문제를 더 잘 해결하기 위해 질문을 적절히 변경하십시오.
Jim McAdams

답변:


1

마지막 항목 만 선택하고 싶습니다

(여기서는 file432.txt) 해당 파일에 대해 추가 작업 (예 : 복사 및 이름 바꾸기)을 수행하십시오.

다음 배치 파일을 사용하십시오.

test.cmd :

@echo off 
setlocal
for /r . %%g in (file*.txt) do (
  set _lastitem=%%g
  )
echo do something to the last file in the list, which is %_lastitem%
endlocal

출력 예 :

F:\test>dir file*.txt
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

22/08/2016  18:17                 0 file101.txt
22/08/2016  18:17                 0 file212.txt
22/08/2016  18:17                 0 file432.txt
               3 File(s)              0 bytes
               0 Dir(s)  1,765,302,566,912 bytes free

F:\test>test
do something to the last file in the list, which is F:\test\file432.txt

F:\test>

매력처럼 일했다. 내가 개선 할 유일한 것은 "% _lastitem %"따옴표를 사용하는 것입니다. 이런 식으로 공백이있는 디렉토리 경로는 문제를 일으키지 않습니다. : D
Jim McAdams
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.