Aprire uno di una serie di file utilizzando un file batch
-
09-06-2019 - |
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.
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.