2017-02-03 1 views
0

Ich benötige ein Batch-Skript, das ein Laufwerk (D :) auf das Attribut 'Zuletzt geändert' von * .czi-Dateien (Carl Zeiss Bilddateien) und hängen die Daten an eine Datei auf einem anderen Laufwerk an. Ich habe versucht, Lösungen mit der folgenden Zeile:Die Attribute der zuletzt geänderten Datei in einem in eine Datei geschriebenen Verzeichnis abrufen

FOR /F "delims=" %%I IN ('DIR %source%*.czi /A:-D /O:-D /T:W /B') DO COPY "%%I" > %target% 

das bedeutet mir die letzte Datei, aber es kopiert die gesamte Datei, die nicht so schlau ist, da sie groß sein kann. Als Biologe werde ich Sie für meine verzweifelten Versuche ersparen, die nicht funktionierten (4-5 Stunden). Ich denke, dass das leicht gemacht werden kann, wenn du weißt wie ... Gute Vorschläge? Jede Antwort wird geschätzt! Danke im Voraus.

+1

Definieren Sie, was Sie mit Attributen meinen, vorzugsweise indem Sie diese Informationen an Ihre Frage anhängen. – Compo

+1

auch was sind die "Daten", die Sie an die Zieldatei anhängen möchten? Der Inhalt der * .czi-Datei oder das Attribut 'Zuletzt geändert'? –

+1

Da Sie ein 'dir/o-d' ausführen, sollte Ihr Befehl die allererste modifizierte Datei nach 'target' kopieren, indem Sie jede Datei beginnend mit ** last ** kopieren. Sie müssten '' 'anstelle von' '' verwenden, um die Daten anzuhängen. Die Datei "%% I" ist der gefundene Dateiname, aber das Kopieren würde aus dem * current * -Verzeichnis erfolgen, das nicht "source" sein könnte. Sie sollten "% source %%% I" verwenden, um den Quellverzeichnisnamen einzubeziehen. Ich würde vorschlagen, dass Sie Ihre Frage bearbeiten, um die Angelegenheit zu klären. Möchten Sie "Ziel" einfach durch die letzte Datei ersetzen oder die letzte Datei anhängen, oder ist es die erste Datei? – Magoo

Antwort

0

Ihre Frage ist unklar, so lassen Sie mich versuchen, es neu zu formulieren:

Ich glaube, Sie die zuletzt geänderten Datei mit einer Erweiterung .CZI finden wollen, und kopieren Sie nur das neueste Datei an einem Zielort.

Um alle .CZI Dateien in allen Unterverzeichnissen Liste, Neu-Datei zuerst sortiert:

(for /f %a in ('dir *.CZI /s /b') do @echo %~ta %~fa) | sort 

Wenn die erste Zeile dieser Ausgabe ist die Datei, die Sie wollen, dann alles, was Sie tun müssen, ist Kopie diese eine Datei zu deinem Ziel.

(und bitte nehmen Sie die Zeit, detaillierte und klare Fragen zu schreiben, so dass wir gute Antworten liefern können)

0

der gerade die letzte geänderte Datei Zeit neueste Datei gesucht von allen * .czi Dateien Nehmen wir an, in Verzeichnis C:\Temp zum Beispiel enthalten:

30.01.2017 08:13 First Listed.czi 
28.01.2017 21:26 Oldest Image.czi 
03.02.2017 17:13 Newest Image.czi 

Der Code Batch für diese Aufgabe könnte sein:

@echo off 
set "Source=C:\Temp\" 
set "Target=%Source%List.txt" 
for /F "delims=" %%I in ('dir "%Source%*.czi" /A:-D /B /O:-D /T:W 2^>nul') do (
    echo File "%%I" last modified on %%~tI>>"%Target%" 
    goto AfterLoop 
) 
:AfterLoop 

Der Befehl DIR sucht nach * .czi-Dateien im Verzeichnis C:\Temp und gibt die Liste sortiert nach der letzten Änderungszeit in umgekehrter Reihenfolge von neu nach alt aus.

Im Falle von No * .czi Datei gefunden, wird eine Fehlermeldung ausgegeben DIR-Befehl könnte würde STDERR behandeln. Diese Ausgangsnachricht wird mit 2>nul zu Gerät NUL umgeleitet, es zu unterdrücken, wodurch der Umleitungsoperator > muss hier mit ^ entwertet wird als Umleitungsoperator interpretiert wird bei der Ausführung von DIR Befehlszeile und nicht bereits auf FOR Befehlszeilen Parsen .

%%I verweist auf den Namen der Datei als Ausgabe von DIR und %%~tI Referenzen Datum der letzten Änderung der Datei. Die Hilfe des Befehls FOR Ausgabe durch Ausführen in einem Eingabeaufforderungsfenster for /? erklärt diese Modifikatoren.

Die Schleife wird beendet, nachdem die erste Ausgabe des Texts an die Zieldatei umgeleitet wurde, an die die Zeile angehängt wird, falls sie bereits vorhanden ist, weil >> anstelle von > verwendet wird.

Für die Beispieldateien Liste der folgende Zeile C:\Temp\List.txt angefügt:

File "Newest Image.czi" last modified on 03.02.2017 17:13 

für die verwendeten Befehle verstehen und wie sie arbeiten, öffnen Sie vollständig alle eine Eingabeaufforderung, führen Sie dort die folgenden Befehle ein, und lesen Hilfeseiten werden für jeden Befehl sehr sorgfältig angezeigt.

  • dir /?
  • echo /?
  • for /?
  • goto /?
  • set /?

Siehe auch den Artikel von Microsoft Using command redirection operators.

Verwandte Themen