Ouvrez l'un d'une série de fichiers à l'aide d'un fichier batch
-
09-06-2019 - |
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.
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.