2016-06-03 14 views
-1

Ich habe an einem Batch-Skript gearbeitet, um einen Ordner durchzulaufen und eine Liste der Dateien zu erstellen, sortiert nach der letzten Änderung. Im Moment funktioniert es wie erwartet, aber es sucht nicht durch Unterordnern, unten ist mein Code:Batch-Skript: For-Schleife mit zwei Befehlen

echo Last executed on %date% at %time% > report.csv 
echo. >> report.csv 
FOR /F "TOKENS=1-4,* SKIP=4" %%a IN ('DIR /O-D /TW') DO (
    IF exist %%e (
     IF NOT %%e==.. (
      IF NOT %%e==. (
       echo %%e >> report.csv 
       echo %%a %%b >> report.csv 
) 
) 
) 
) 
:Start 
    CScript modifyexcelGood.vbs 
:End 
goto :eof 

diejenigen wenn Aussagen ignorieren, sie sind einfach da falsche Dateinamen zu verhindern, war ich immer. Ich weiß, dass der/R-Befehl zum Durchsuchen von Unterordnern dient, aber es scheint, ich kann nicht beide/R und/F verwenden, oder vielleicht bin ich falsch? Ich habe das Gefühl, dass es eine einfache Lösung gibt, aber ich konnte sie nicht finden.

Dank

EDIT Um zu klären, sortiert die Batch-Datei, die alle Dateien in einem Verzeichnis nach dem Datum geändert und führt den Dateinamen und das Datum jeder in einer Excel-Tabelle gefundene Datei (in sortierter Reihenfolge). Es startet dann ein VB-Skript, das das Blatt bearbeitet, damit es gut aussieht. Die Vbs und Bat-Skripte müssen zusammen sein, aber sie sollen in jedem Verzeichnis verwendet werden. Sie sollen dazu beitragen, große Verzeichnisse zu bereinigen, in denen alte Dateien herumliegen. (Es wird schließlich die alten Dateien zu löschen, sobald ich weiß, dass dies funktioniert 100%.)

Ich kann diese in einem beliebigen Verzeichnis und es funktioniert gut, ich brauche es nur, um die Dateien in allen Unterordnern sowie.

Also wie kann ich meinen Code bearbeiten, um zu überprüfen, ob %% e ein Verzeichnis ist, und wenn ja, die Schleife in diesem Verzeichnis?

Dank

+0

Geben Sie 'dir /?' An einer Eingabeaufforderung ein, und sehen Sie sich die verfügbaren Schalter an - funktioniert '/ S' nicht, ohne dass Sie eine weitere Schleife hinzufügen müssen? –

+0

'dir/s/o-d' sortiert nach Unterverzeichnis. Ich denke, OP will all diese Dateien unabhängig von ihrem Verzeichnis sortiert haben. 'dir 'kann das nicht tun. – Stephan

+0

@Stephan: Es ist unklar, was das OP überhaupt will, da nichts erklärt wurde. Beachten Sie das ? am Ende meines vorherigen Kommentars. –

Antwort

0

Ich fürchte, Ihre Anfrage ist nicht klar. Die folgende Zeile listet jedoch die Dateien im aktuellen Ordner und allen darunter liegenden Unterordnern auf, eine Zeile pro Datei und sortiert alle Dateien nach Datum der letzten Änderung, neuere Dateien zuerst.

(for /F "delims=" %%a in ('dir /T:W /S /B') do echo %%~Ta %%a) | sort /R > report.csv 

Wenn Sie irgendeinen Zweifel über dir Befehl schaltet haben (wie /B), Typ dir /?.

+0

Danke, das funktioniert. – Skilleen

+0

Dies wird nicht nach Datum sortiert - es sei denn, Ihr Datumsformat ist "YYYY-MM-DD" – Stephan

0

, um wirklich die Dateien nach Datum zu sortieren, Sie yyyy.MM.dd

@echo off 
setlocal EnableDelayedExpansion 
REM get current short date format: 
for /f "tokens=2,*" %%a in ('reg query "HKCU\Control Panel\International" /v sShortDate') do set orig-format=%%b 
REM set short format to yyyy.MM.dd: 
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy.MM.dd" /f >nul 

(for /F "delims=" %%a in ('dir /a-d /T:W /S /B') do @echo %%~Ta %%a)|sort /r >report.csv  

REM set short date format back to original settings: 
reg add "HKCU\Control Panel\International" /v sShortDate /d "%orig-format%" /f >nul 

Ich habe die Linie von Aacini mit folgenden Änderungen des kurzen Datumsformats vorübergehend ändern können:
- hinzugefügt /a-d-dir Ordner ausschließen
- hinzugefügt @ vor echo, die eine Menge von leeren Zeilen in der resultierenden Datei entfernt.
und legen Sie die notwendigen Änderungen für das Datumsformat um.