Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Batch kopieren bis Datum Uhrzeit

Frage Entwicklung Batch & Shell

Mitglied: dieEule

dieEule (Level 1) - Jetzt verbinden

15.04.2009, aktualisiert 20:52 Uhr, 3679 Aufrufe, 5 Kommentare

Hallo,
ich bin neu hier im Forum und habe ein kleines Problem!

Ich versuche gerade eine Batchdatei zu schreiben, die bei der Erkennung eines Netzwerkes automatisch ein Netzlaufwerk verbindet und dann aus einem Verzeichniss alle Unterverzeichnisse sammt Inhalt kopiert.
Das funktioniert im Prinzip jetzt schon, das eigentliche Problem besteht darin, dass eine Datei aus dem Verzeichniss immer im Schreibprozess ist (ein Datenlogger, der kontinuierlich Daten schreibt und dessen zugehörige Software diese Stundenweise zu Dateien in Unterordner auf dem angeschlossenen PC speichert). Ich würde jetzt also gerne den neuesten Ordner vom Kopiervorgang ausschließen, habe aber keine Ahnung, wie ich das Erstellungsdatum des Ordners heraus bekomme!!! (Wenn der Ordner mit kopiert wird, beendet mir der Kopiervorgang den Schreibprozess der Datenloggersoftware)

Kann mir da evtl. jemand einen Tipp geben? (Geht das überhaupt?)
Als Anhang mal mein Batchfile... (der 1. Ping dient mir nur als delay-Funktion, die IP ist nicht vergeben)

Gruß Christian

01.
@echo off 
02.
set /a m=0 & set /a i=0 
03.
rem pause 
04.
echo %m% 
05.
rem pause 
06.
echo %i% 
07.
rem pause 
08.
 
09.
 
10.
:anruf 
11.
 
12.
IF %i% LSS 3 (  
13.
set /a i=%i%+1 
14.
echo anruf 
15.
ping -n 1 -w 1000 10.0.8.55 
16.
ping -n 1 -w 1000 10.0.8.5 
17.
IF %errorlevel%==1 (set /a m=%m%+1 
18.
)  
19.
echo i=%i% 
20.
echo m=%m% 
21.
goto anruf 
22.
23.
 
24.
IF %m%==0 goto netzlaufwerk 
25.
 
26.
set /a i=0 
27.
set /a m=0 
28.
goto anruf 
29.
 
30.
:netzlaufwerk 
31.
echo bei netzlaufwerk angekommen 
32.
echo verbinden 
33.
 
34.
net use "\\10.0.8.20\(f) usb disk" /delete 
35.
 
36.
net use "\\10.0.8.20\(f) usb disk" Passwort /user:xxxxxx 
37.
 
38.
if %errorlevel%==1 goto anruf 
39.
 
40.
xcopy "\\10.0.8.20\(f) usb disk\test" D:\test /c /i /y /f /d /s 
41.
if %errorlevel%==0 goto ende 
42.
goto anruf 
43.
 
44.
 
45.
rem echo %errorlevel% 
46.
 
47.
:ende 
48.
net use "\\10.0.8.20\(f) usb disk" /delete 
49.
pause
Mitglied: bastla
15.04.2009 um 14:45 Uhr
Hallo die Eule und willkommen im Forum!

Ungetestet würde ich es mit folgenden Zeilen als Ersatz der bisherigen "xcopy"-Zeile versuchen:
01.
for /f "delims=" %%i in ('dir /b /ad /od "\\10.0.8.20\(f) usb disk\test\*.*"') do set "DasNicht=%%i" 
02.
echo "%DasNicht%">%temp%\DasNicht.txt 
03.
 
04.
xcopy "\\10.0.8.20\(f) usb disk\test" D:\test /c /i /y /f /d /s /Exclude:%temp%\DasNicht.txt
Grüße
bastla
Bitte warten ..
Mitglied: dieEule
15.04.2009 um 15:10 Uhr
Hallo bastla,

danke für die schnelle Antwort!
Ich verstehe die erste Zeile nicht (ich habe gerade erst angefangen mich mit batch (bzw. Programmierung allgemein) zu beschäftigen und spreche/verstehe es deshalb noch nicht so wirklich) kannst du sie mir evtl. erläutern?

Und ich glaube dass es besser wäre, wenn man nur bis zu einem bestimmten Datum/Uhrzeit kopiert, da die Zeit nach der der Datenlogger eine neuen Ordner auf macht während des kopiervorgangs abläuft, und dann würde ja die neu aufgemachte Datei trotzdem kopiert?
Eine funktion kopiere alles ab Datum gibt es ja, gibt es auch kopiere alles bis Datum? (Und dann für Datum Systemdatum minus 2h, oder so)
Oder ist es möglich sich immer die älteste Datei/den ältesten Ordner zu nehmen, zu kopieren und dann zu löschen und den letzten (jüngsten) nicht zu bearbeiten?

Danke schon mal!

Gruß
Christian
Bitte warten ..
Mitglied: bastla
15.04.2009 um 16:49 Uhr
Hallo dieEule!
immer die älteste Datei/den ältesten Ordner zu nehmen, zu kopieren und dann zu löschen und den letzten (jüngsten) nicht zu bearbeiten?
.. wäre wohl die beste Vorgangsweise, wenn es sich zeitlich nicht anders ausgeht. Auch für diese Variante ist dann übrigens die obige erste Zeile erforderlich - damit wird nämlich der Name des jüngsten Verzeichnisses ermittelt, indem ein (nach Änderungsdatum) sortiertes Inhaltsverzeichnis erstellt und das letzte Verzeichnis dieser Liste in die Variable %DasNicht% übernommen wird.

Der angepasste (allerdings ungetestete) Batch könnte dann so aussehen:
01.
@echo off & setlocal 
02.
set /a m=0 & set /a i=0 
03.
echo %m% 
04.
echo %i% 
05.
rem pause 
06.
 
07.
:anruf 
08.
if %i% LSS 3 ( 
09.
    set /a i+=1 
10.
    echo anruf 
11.
    ping -n 1 -w 1000 10.0.8.55 
12.
    ping -n 1 -w 1000 10.0.8.5 
13.
    if errorlevel 1 set /a m+=1 
14.
15.
echo i=%i% 
16.
echo m=%m% 
17.
goto anruf 
18.
 
19.
if %m%==0 goto netzlaufwerk 
20.
 
21.
set /a i=0 
22.
set /a m=0 
23.
goto anruf 
24.
 
25.
:netzlaufwerk 
26.
echo bei netzlaufwerk angekommen 
27.
echo verbinden 
28.
 
29.
net use "\\10.0.8.20\(f) usb disk" /delete 
30.
net use "\\10.0.8.20\(f) usb disk" Passwort /user:xxxxxx 
31.
if errorlevel 1 goto anruf 
32.
 
33.
set Error= 
34.
for /d %%v in ("\\10.0.8.20\(f) usb disk\test\*.*") do call :ProcessDir "%%v" 
35.
if defined Error goto anruf 
36.
 
37.
net use "\\10.0.8.20\(f) usb disk" /delete 
38.
pause 
39.
goto :eof 
40.
 
41.
:ProcessDir 
42.
for /f "delims=" %%i in ('dir /b /ad /od "\\10.0.8.20\(f) usb disk\test\*.*"') do set "DasNicht=%%i" 
43.
if /i "%~nx1"=="%DasNicht% goto :eof 
44.
 
45.
xcopy %1 "D:\test\%~nx1\" /c /i /y /f /d /s  
46.
if errorlevel 1 set Error=True 
47.
goto :eof
Die Änderung der Abfragen
if %errorlevel%==1
auf
if errorlevel 1
hat mehrere Gründe: Zum Einen werden damit alle Errorlevel >= 1 berücksichtigt, zum Anderen liefert %errorlevel% (wie alle anderen "Nicht-Schleifen-Variablen") innerhalb einer Schleife nur den einmalig am Beginn dieser Schleife zugewiesenen Wert.

Aus diesem Grund erfolgt auch die Überprüfung auf den neuesten Ordner in einem Unterprogramm - dort stehen alle Variablen aktuell zur Verfügung.

Grüße
bastla

P.S.: Ist es Absicht, dass in den Zeilen 11 und 12 unterschiedliche Adressen "gepingt" werden?

P.P.S: Bitte verwende zum Posten von Batches die passende Formatierung ...
Bitte warten ..
Mitglied: dieEule
16.04.2009 um 19:30 Uhr
Hallo, herzlichen Dank erst mal!

Ich kann gerade nur zwischen Tür und Angel an den Rechner, werde es aber hoffentlich am WE schaffen das auszuprobieren!
Die erste Adresse dient nur einer Verzögerung um 1 sek. Die IP ist garnicht vergeben. (Ich habe nichts gefunden um eine Delay-Funktion zu realisieren)

Das mit der Formatierung werde ich beherzigen!

Danke erst mal

Christian
Bitte warten ..
Mitglied: Biber
16.04.2009 um 23:11 Uhr
Moin dieEule,

Die erste Adresse dient nur einer Verzögerung um 1 sek.
Dann wäre mein Vorschlag:
Streiche: ping -n 1 -w 1000 10.0.8.55
Setze: ping -n 1 -w 1000 localhost >nul
....also den eigenen Rechner anpingen aus o.g. Gründen. Und die Ausgabe ungelesen entsorgen.

Und bei den heutigen Rechnerleistungen würde es nur eine verschmerzbare Verlangsamung des Batches bewirken,
wenn Du so alle paar Zentimeter eine Kommentarzeile einfügst.
So relativ übersichtlich wie der Schnipsel auch jetzt wirken mag - wenn Du ihn in einem Jahr mal wieder wegen irgendeiner Anpassung anfassen musst, dann wirst Du es zu schätzen wissen.

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...