Abra uno de una serie de archivos usando un archivo por lotes
-
09-06-2019 - |
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.
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.