2008-09-09 9 views
5

tengo hasta 4 archivos en función de esta estructura (tenga en cuenta los prefijos son fechas)Abra uno de una serie de archivos mediante un archivo por lotes

  • 0830filename.txt
  • 0907filename.txt
  • 0914filename .txt
  • 0921filename.txt

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

Gracias.

Respuesta

9

Este método utiliza la fecha real de modificación del archivo, para averiguar 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 la primera, a la inversa para -alphabetic), por lo que si los nombres de archivo son compatibles - que 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 tienes que elegir qué método es mejor para usted.

+0

¿Puede decirme qué hace %% i en la línea 2 y qué hace% ~ 1 en la línea 7? ¡Gracias! – Keng

+0

%% i es la variable de bucle (obtendrá el valor de la primera palabra en cada línea que el comando entre paréntesis escribe en la salida estándar). % 1 es una forma simple de acceder al argumento de línea de comando pasado al script o la etiqueta (como en mi caso). % ~ 1, sin embargo, elimina las comillas (si las hay). – Paulius

+0

Vilnius, Lithuania ...? .... hmmmm ... Conozco a un programador allí ... Gintaras Didzgalvis, él hace QuickMacros (http://QuickMacros.com). Deberías buscarlo alguna vez. – Keng

-1

Utilice la expresión regular para analizar el entero pertinente y compararlos.

+0

Creo que está implícito en la pregunta que él sólo quiere usar lo que se iba estar disponible desde una línea de comando.¿Conoces una herramienta de línea de comandos RE que estaría disponible en Windows? –

1

Aquí va ... (espero que nadie me gane ...) (Necesitará guardar el archivo como lasttext.bat o algo así) Esto abrirá/ejecutará el .txt más antiguo archivo

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

Probably XP only. HE AQUÍ El gran poder de DOS.
Aunque toma el nombre de archivo más reciente 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.

+1

Su método funcionará, pero creará archivos temporales innecesarios. Además, al usar del en las secuencias de comandos BATCH, siempre agrego el modificador/Y - de lo contrario, el comando del delta puede ser muy molesto ... :) – Paulius

+0

buena llamada - Voy a editar. – seanyboy

4

Un forro, utilizando truco SALIR:

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

EDIT:

@pam: Tienes razón, yo estaba asumiendo que los archivos estaban en orden de fecha, pero se puede cambiar la comando a:

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

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

6

Disculpa, por enviar spam esta pregunta, pero realmente me gustaría publicar The Real Answer. Si desea que su script por lotes a analizar y comparar las fechas en nombres de archivo, entonces se 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 
+0

No estoy en este momento pero maldito si eso no es bueno !! – Keng

+0

HOMBRE! ¿Conoces algún buen libro sobre cómo aprender a escribir cosas como esta? – Keng

+0

¡probablemente también puedas responder esta pregunta! http://beta.stackoverflow.com/questions/51054/batch-file-to-delete-files-older-than-n-days – Keng

Cuestiones relacionadas