command line - sirven - Abra uno de una serie de archivos usando un archivo por lotes
ejemplos de archivos por lotes (5)
Aquí tienes ... (espero que nadie me gane) ... (Necesitarás guardar el archivo como lasttext.bat o algo así) Esto 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 algo diferente, agregue un comando "ordenar" a la segunda línea.
Tengo hasta 4 archivos basados en esta estructura (tenga en cuenta que los prefijos son fechas)
- 0830filename.txt
- 0907filename.txt
- 0914filename.txt
- 0921filename.txt
Quiero abrir el más reciente (0921filename.txt). ¿Cómo puedo hacer esto en un archivo por lotes?
Gracias.
Este método usa la fecha de modificación del archivo real, para descubrir cuál es el último archivo:
@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
De hecho, debes elegir qué método es mejor para ti.
Lo siento, por enviar esta pregunta por correo no deseado, pero realmente tengo ganas de publicar The Real Answer . Si desea que su script BATCH analice y compare las fechas en los nombres de los archivos, puede 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
Un trazador de líneas, 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 tiene la lista de archivos ordenada por nombre en orden inverso.
Use la expresión regular para analizar el entero relevante y compararlos.