2008-09-09 29 views

Répondre

9

Cette méthode utilise la date de modification du fichier réel, à savoir lequel est le dernier fichier:

@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 

Cependant, cette méthode, choisit le dernier fichier par ordre alphabétique (ou le premier, en sens inverse -alphabetic ordre), donc si les noms de fichiers sont compatibles - il fonctionnera:

@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 

vous avez fait de choisir la méthode est mieux pour vous.

+0

Pouvez-vous me dire ce que fait le %% i dans la ligne 2 et ce que le% ~ 1 fait dans la ligne 7? Merci! – Keng

+0

%% i est la variable de boucle (elle obtiendra la valeur du premier mot de chaque ligne que la commande entre parenthèses écrit dans la sortie standard). % 1 est un moyen simple d'accéder à l'argument de ligne de commande transmis au script ou à l'étiquette (comme dans mon cas). % ~ 1, cependant, supprime les citations (le cas échéant). – Paulius

+0

Vilnius, Lituanie ...? ... hmmmm ... Je connais un programmeur là-bas ... Gintaras Didzgalvis, il fait QuickMacros (http://QuickMacros.com). Tu devrais le chercher un jour. – Keng

-1

Utilisez une expression régulière pour analyser l'entier pertinent et les comparer.

+0

Je pense qu'il est impliqué dans la question qu'il veut seulement utiliser des choses qui seraient être disponible à partir d'une ligne de commande.Connaissez-vous un outil RE de ligne de commande qui serait disponible sous Windows? –

1

Ici vous allez ... (j'espère que personne ne m'a battu dessus ...) (Vous aurez besoin de sauvegarder le fichier sous le nom lasttext.bat ou quelque chose) Ceci ouvrira/exécutera le fichier .txt le plus ancien fichier

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

Probablement XP seulement. BEHOLD Le puissant pouvoir de DOS.
Bien que cela prenne le dernier nom de fichier par date - PAS par nom de fichier ..

Si vous voulez obtenir le dernier nom de fichier, changez/od à/sur.
Si vous souhaitez trier sur autre chose, ajoutez une commande "trier" à la deuxième ligne.

+1

Votre méthode fonctionnera, mais elle créera des fichiers temporaires inutiles. En outre, lors de l'utilisation de del dans les scripts BATCH, j'ai toujours ajouter le commutateur/Y - sinon la commande del peut être très ennuyeux ... :) – Paulius

+0

bon appel - Je vais modifier. – seanyboy

4

une ligne, en utilisant trick EXIT:

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

EDIT:

@pam: tu as raison, je supposais que les fichiers étaient en ordre de date, mais vous pouvez changer la commande à:

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

puis vous avez la liste de fichiers triés par nom dans l'ordre inverse.

6

Désolé, pour spammer cette question, mais j'ai juste envie de poster La vraie réponse. Si vous voulez que votre script LOT à parse et comparer les dates dans les noms de fichiers, vous pouvez utiliser quelque chose comme ceci:

@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

Je ne suis pas en ce moment mais dang si ce n'est pas gentil !! – Keng

+0

MAN! Connaissez-vous de bons livres sur apprendre à écrire des trucs comme ça ?! – Keng

+0

vous pourriez probablement répondre à cette question aussi! http://beta.stackoverflow.com/questions/51054/batch-file-to-delete-files-older-than-n-days – Keng