Pregunta

Tengo hasta 4 archivos basados ​​en esta estructura (tenga en cuenta que los prefijos son fechas)

  • 0830nombredearchivo.txt
  • 0907nombredearchivo.txt
  • 0914nombredearchivo.txt
  • 0921nombredearchivo.txt

Quiero abrir el más reciente (0921filename.txt).¿Cómo puedo hacer esto en un archivo por lotes?

Gracias.

¿Fue útil?

Solución

Este método utiliza la fecha de modificación del archivo real para determinar cuál es el archivo más reciente:

@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

Este método, sin embargo, elige el último archivo en orden alfabético (o el primero, en orden alfabético inverso), por lo que si los nombres de los archivos son consistentes, funcionará:

@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

En realidad, tienes que elegir qué método es mejor para ti.

Otros consejos

Lo siento, por enviar spam a esta pregunta, pero realmente tengo ganas de publicarla. La verdadera respuesta.Si desea que su secuencia de comandos BATCH analizar gramaticalmente y comparar las fechas en los nombres de archivos, entonces puedes usar algo como esto:

@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 línea, usando el truco EXIT:

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

EDITAR:

@pam:tienes razón, asumí que los archivos estaban en orden de fecha, pero puedes cambiar el comando a:

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

luego tienes la lista de archivos ordenados por nombre en orden inverso.

Aquí tienes...(Espero que nadie me haya ganado ...) (Tendrá que guardar el archivo como lasttext.bat o algo) Esto se abrirá / ejecutará el archivo .txt más antiguo

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

Probablemente solo XP.HE AQUÍ el gran poder de DOS.
Aunque esto toma el último nombre de archivo por fecha, NO por nombre de archivo.

Si desea obtener el nombre de archivo más reciente, cambie /od a /on .
Si desea ordenar por otra cosa, agregue un comando "ordenar" a la segunda línea.

Utilice expresiones regulares para analizar el número entero relevante y compararlos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top