Domanda

Ho fino a 4 file basati su questa struttura (nota che i prefissi sono date)

  • 0830nomefile.txt
  • 0907nomefile.txt
  • 0914nomefile.txt
  • 0921nomefile.txt

Voglio aprire quello più recente (0921nomefile.txt).come posso farlo in un file batch?

Grazie.

È stato utile?

Soluzione

Questo metodo utilizza la data effettiva di modifica del file, per capire qual è il file più recente:

@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

Questo metodo, tuttavia, sceglie l'ultimo file in ordine alfabetico (o il primo, in ordine alfabetico inverso), quindi se i nomi dei file sono coerenti, funzionerà:

@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

In realtà devi scegliere quale metodo è migliore per te.

Altri suggerimenti

Scusate se ho spammato questa domanda, ma ho davvero voglia di postare La vera risposta.Se vuoi che il tuo script BATCH lo faccia analizzare E confrontare le date nei nomi dei file, quindi puoi usare qualcosa del genere:

@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

Una riga, usando il trucco EXIT:

FOR /F %%I IN ('DIR *.TXT /B /O:-D') DO NOTEPAD %%I & EXIT

MODIFICARE:

@pam:hai ragione, supponevo che i file fossero in ordine di data, ma puoi modificare il comando in:

FOR /F %%I IN ('DIR *.TXT /B /O:-N') DO NOTEPAD %%I & EXIT

quindi avrai l'elenco dei file ordinato per nome in ordine inverso.

Ecco qui...(Spero che nessuno mi abbia battuto ...) (Dovrai salvare il file come lasttext.bat o qualcosa del genere) Questo aprirà / eseguirà il file .txt più antico

dir *.txt /b /od > systext.bak 
FOR /F %%i in (systext.bak) do set sysRunCommand=%%i 
call %sysRunCommand%
del systext.bak /Y

Probabilmente solo XP.ECCO Il potente potere del DOS.
Anche se questo richiede il nome file più recente per data, NON per nome file..

Se vuoi ottenere il nome file più recente, cambia /od in /on .
Se vuoi ordinare qualcos'altro, aggiungi un comando "sort" alla seconda riga.

Utilizza l'espressione regolare per analizzare il numero intero pertinente e confrontarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top