Question

J'ai jusqu'à 4 fichiers basés sur cette structure (notez que les préfixes sont des dates)

  • 0830nomfichier.txt
  • 0907nomfichier.txt
  • 0914nomfichier.txt
  • 0921nomfichier.txt

Je souhaite ouvrir le plus récent (0921filename.txt).comment puis-je faire cela dans un fichier batch ?

Merci.

Était-ce utile?

La solution

Cette méthode utilise la date de modification réelle du fichier pour déterminer 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

Cette méthode, cependant, choisit le dernier fichier par ordre alphabétique (ou le premier, par ordre alphabétique inversé), donc si les noms de fichiers sont cohérents, cela 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

En fait, vous devez choisir quelle méthode vous convient le mieux.

Autres conseils

Désolé d'avoir spammé cette question, mais j'ai vraiment envie de poster La vraie réponse.Si vous souhaitez que votre script BATCH analyser et comparer les dates dans les noms de fichiers, vous pouvez alors 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

Une doublure, en utilisant l'astuce EXIT :

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

MODIFIER:

@pam :vous avez raison, je supposais que les fichiers étaient par ordre de date, mais vous pouvez modifier la commande en :

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

Ensuite, vous avez la liste des fichiers triée par nom dans l'ordre inverse.

Voici...(J'espère que personne ne m'a battu ...) (vous devrez enregistrer le fichier sous le nom de LastText.bat ou quelque chose)

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

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

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top