2008-09-09 15 views

Antwort

9

Diese Methode verwendet die tatsächliche Änderungsdatum Datei, um herauszufinden, welche die neueste Datei ist:

@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 

Dieses Verfahren ist jedoch wählt die letzte Datei in alphabetischer Reihenfolge (oder der erste, in umgekehrter -alphabetic Reihenfolge), so dass, wenn die Dateinamen übereinstimmen - es funktioniert:

@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 

Sie müssen tatsächlich entscheiden, welche Methode für Sie besser ist.

+0

Können Sie mir sagen, was das %% i in Zeile 2 macht und was das% ~ 1 in Zeile 7 tut? Vielen Dank! – Keng

+0

%% i ist die Schleifenvariable (sie erhält den Wert des ersten Wortes in jeder Zeile, den der Befehl in Klammern in die Standardausgabe schreibt). % 1 ist eine einfache Möglichkeit, auf das Befehlszeilenargument zuzugreifen, das an das Skript oder die Beschriftung übergeben wird (wie in meinem Fall). % ~ 1 entfernt jedoch die Anführungszeichen (falls vorhanden). – Paulius

+0

Vilnius, Litauen ...? .... hmmmm ... Ich kenne einen Programmierer dort ... Gintaras Didzgalvis, er macht QuickMacros (http://QuickMacros.com). Du solltest ihn irgendwann aufsuchen. – Keng

-1

Verwenden Sie regulären Ausdruck, um die entsprechende Ganzzahl zu analysieren und zu vergleichen.

+0

Ich denke, es ist in der Frage angedeutet ist, dass er nur Dinge verwenden möchte die würden über eine Befehlszeile verfügbar sein.Kennen Sie ein Befehlszeilen-RE-Tool, das unter Windows verfügbar wäre? –

1

Hier gehts ... (hoffe, dass mich niemand dazu schlägt ...) (Sie müssen die Datei als lasttext.bat oder so etwas speichern) Dies wird öffnen/ausführen der ältesten .txt Datei

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

Wahrscheinlich nur XP. BEHOLD Die mächtige Kraft von DOS.
Dies nimmt den neuesten Dateinamen nach Datum - nicht nach Dateiname ..

Wenn Sie den neuesten Dateinamen abrufen möchten, ändern Sie/od zu/on.
Wenn Sie nach etwas anderem sortieren möchten, fügen Sie der zweiten Zeile einen Befehl "sort" hinzu.

+1

Ihre Methode funktioniert, aber es erstellt unnötige temporäre Dateien. Auch, wenn del in BATCH Skripte verwenden, füge ich immer die/Y-Schalter - sonst kann der Befehl del sehr nervig sein ... :) – Paulius

+0

guten Ruf - ich werde bearbeiten. – seanyboy

4

One-Liner, mit EXIT Trick:

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

EDIT:

@pam: Du hast Recht, ich war die Annahme, dass die Dateien in chronologischer Reihenfolge waren, aber Sie können das ändern Befehl an:

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

dann haben Sie die Dateiliste sortiert nach Namen in umgekehrter Reihenfolge.

6

Entschuldigung, für das Spammen dieser Frage, aber ich fühle mich einfach wie Posting Die echte Antwort. Wenn Sie Ihre Batch-Skript zu analysieren und vergleichen die Daten in Dateinamen, dann können Sie so etwas wie folgt verwenden:

@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

Ich dot't um diese Zeit, aber dang, wenn das nicht nett ist !! – Keng

+0

MAN! Kennst du irgendwelche guten Bücher darüber, wie man solche Sachen schreibt ?! – Keng

+0

Sie könnten wahrscheinlich auch diese Frage beantworten! http://beta.stackoverflow.com/questions/51054/batch-file-to-delete-files-older-than-n-days – Keng