배치 파일을 사용하여 일련의 파일 중 하나 열기
-
09-06-2019 - |
문제
이 구조를 기반으로 최대 4개의 파일이 있습니다(접두사는 날짜임).
- 0830파일이름.txt
- 0907파일이름.txt
- 0914파일이름.txt
- 0921파일이름.txt
가장 최근 파일(0921filename.txt)을 열고 싶습니다.배치 파일에서 어떻게 할 수 있나요?
감사해요.
해결책
이 방법은 실제 파일 수정 날짜를 사용하여 어떤 파일이 최신 파일인지 파악합니다.
@echo off
for /F %%i in ('dir /B /O:-D *.txt') do (
call :open "%%i"
exit /B 0
)
:open
start "dummy" "%~1"
exit /B 0
그러나 이 방법은 알파벳 순서로 마지막 파일(또는 알파벳 역순으로 첫 번째 파일)을 선택하므로 파일 이름이 일관되면 작동합니다.
@echo off
for /F %%i in ('dir /B *.txt^|sort /R') do (
call :open "%%i"
exit /B 0
)
:open
start "dummy" "%~1"
exit /B 0
실제로 어떤 방법이 더 나은지 선택해야 합니다.
다른 팁
이런 질문을 스팸으로 보내서 죄송합니다. 하지만 정말 포스팅하고 싶은 마음이 듭니다. 실제 답변.BATCH 스크립트를 원하는 경우 분석하다 그리고 비교하다 파일 이름에 날짜가 있으면 다음과 같이 사용할 수 있습니다.
@echo off
rem Enter the ending of the filenames.
rem Basically, you must specify everything that comes after the date.
set fn_end=filename.txt
rem Do not touch anything bellow this line.
set max_month=00
set max_day=00
for /F %%i in ('dir /B *%fn_end%') do call :check "%%i"
call :open %max_month% %max_day%
exit /B 0
:check
set name=%~1
set date=%name:~0,4%
set month=%date:~0,2%
set day=%date:~2,2%
if /I %month% GTR %max_month% (
set max_month=%month%
set max_day=%day%
) else if /I %month% EQU %max_month% (
set max_month=%month%
if /I %day% GTR %max_day% (
set max_day=%day%
)
)
exit /B 0
:open
set date=%~1
set month=%~2
set name=%date%%month%%fn_end%
start "dummy" "%name%"
exit /B 0
EXIT 트릭을 사용하는 하나의 라이너:
FOR /F %%I IN ('DIR *.TXT /B /O:-D') DO NOTEPAD %%I & EXIT
편집하다:
@팸:당신 말이 맞아요. 파일이 날짜 순서대로 있다고 가정했지만 명령을 다음과 같이 변경할 수 있습니다.
FOR /F %%I IN ('DIR *.TXT /B /O:-N') DO NOTEPAD %%I & EXIT
그러면 파일 목록이 이름별로 역순으로 정렬됩니다.
여기요...(아무도 나를 이길 수 있기를 바랍니다.)
dir *.txt /b /od > systext.bak
FOR /F %%i in (systext.bak) do set sysRunCommand=%%i
call %sysRunCommand%
del systext.bak /Y
아마도 XP 전용일 겁니다.DOS의 막강한 힘을 보십시오.
파일 이름이 아닌 날짜별로 최신 파일 이름을 사용하지만..
최신 파일 이름을 얻으려면 /od를 /on으로 변경하세요.
다른 항목을 정렬하려면 두 번째 줄에 "sort" 명령을 추가하세요.
정규식을 사용하여 관련 정수를 구문 분석하고 비교합니다.
제휴하지 않습니다 StackOverflow