Top-Themen

Aktuelle Themen (A bis Z)

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
GELÖST

Zeitstempel von Datei überprüfen und verschieben

Frage Entwicklung Batch & Shell

Mitglied: ScoTTy1981

ScoTTy1981 (Level 1) - Jetzt verbinden

16.01.2009, aktualisiert 18.10.2012, 6064 Aufrufe, 10 Kommentare

Gude an alle,

ich hab hier ein prob welches ich nicht ohne hilfe gelöst bekomme, ich möchte eine batch schreiben, welche mehrere Dateien überprüft.
Dies soll wiefolgt ablaufen: Ist eine Datei älter als 15 Minuten soll diese in einen ordner verschoben werden.

Dort soll dann ein txt file generiert werden, indem nur eine bestimmte art dateiformat in die txt geloggt wird (*.csv).

Ich dachte sowas an wie xcopy, dort habe ich aber nur das die möglichkeit mit einen festen datum zu arbeiten... oder doch nicht??

kann mir bitte einer helfen.... zumindest wie die syntax des xcopy befehles ist oder gibt es da noch eine andere möglichkeit??

grüße marco
Mitglied: bastla
16.01.2009, aktualisiert 18.10.2012
Hallo ScoTTy1981 und willkommen im Forum!

Als Starthilfe: Bedingung in Abhängigkeit vom Alter einer Datei ...

Grüße
bastla
Bitte warten ..
Mitglied: ScoTTy1981
18.01.2009 um 10:37 Uhr
Hallo biber,

danke danke für die Begrüßung und den post, so was suche ich,habe auch die copy passage hinzugefügt indem die zeit kontrolliert wird.
Wenn ich aber jetzt nur den zeitstempel kontrollieren will (ohne datum), wie muss ich denn den folgenden Quellcode ändern, kannste mir büdde helfen??

Grüße Marco

01.
:: --snipp GetFileMinutesDemo.bat Parameter1 Filename/File-Wildcards 
02.
:: Placed in the Public Domain for Educational Purposes Biber 2006 
03.
@echo off & setlocal 
04.
call :DateToDays todayInDays %date%    && REM Heutiges Datum  als Ganzzahl 
05.
call :TimeToMins todaysMinutes %time%  && REM Minuten sei Mitternacht als Ganzzahl 
06.
 
07.
For %%i in (%1) do call :CompareMinutes %%i %todayInDays% %TodaysMinutes% 
08.
goto :eof 
09.
 
10.
~~~~~~~~~~ Ende des Hauptbatches... es folgen geCALLte Unterroutinen 
11.
 
12.
:CompareMinutes Parameter1:Datei; Para2: Heute als Ganzzahl; Para3: Minuten heute seit Mitternacht  
13.
 
14.
For /f "tokens=1-2" %%a in ("%~t1") do ( 
15.
   call :DateToDays FileInDays %%a  && REM DateiDatum als Ganzzahl 
16.
   call :TimeToMins FileMinutes %%b && Rem Datei-Minuten seit Mitternacht 
17.
18.
 
19.
Set /a "yesterday=%2-1" 
20.
if %fileinDays% LSS %2                  Set /a "TodayCompMinutes=%3+(60*24)-30"      
21.
If %fileinDays% LSS %2 if 1%todayCompMinutes% GTR 1%fileMinutes% ( 
22.
    (echo [GTR] %~t1 %~f1: von gestern; älter als 30 Minuten)  && goto :eof 
23.
) else ( 
24.
    (echo [LEQ] %~t1 %~f1: von gestern; jünger als 30 Minuten) && goto :eof 
25.
26.
REM verbleibender Fall: Datei ist von Heute: 
27.
Set /a "FileMinutes+=30" 
28.
If %fileminutes% LSS %3 ( 
29.
   echo [GTR] %~t1 %~f1: von heute; älter als 30 Minuten  
30.
	  copy %~f1 c:\test | find ".csv" >> c:\test\transfer.log 
31.
) else ( 
32.
   echo [LSS] %~t1 %~f1: von heute; jünger als 30 Minuten    
33.
)   
34.
goto :eof 
35.
~~~~~~~~~~~ 
36.
:DateToDays ; Para1=Variablenname; Para2 [,Para3] :Datum als "[ttt] TT.MM.[JJ]JJ"  
37.
For %%i in (%2 %3) do set "now=%%i" 
38.
for /f "tokens=1-3 delims=./" %%a in ("%now%") do ( 
39.
      Set /a "%1=((%%c%%100)*365)+((1%%b-100)*12)+(1%%a-100)" ) 
40.
goto :eof 
41.
~~~~~~~~~~ 
42.
:TimeToMins Parameter1: Variablenname Parameter2:Zeit im Format hh:mm 
43.
For /f "tokens=1-2 delims=:" %%a in ("%2") do set /a "%1=(1%%a-100)*60+(1%%b-100)" 
44.
:: ---snapp GetFileMinutesDemo.bat
Bitte warten ..
Mitglied: bastla
18.01.2009 um 11:15 Uhr
Hallo ScoTTy1981!

Eigentlich hatte ich Dich auf die VBS-Variante hinweisen wollen - damit genügt etwa Folgendes:
01.
@echo off & setlocal 
02.
set "Datei=D:\Dein Pfad\Deine Datei.txt" 
03.
 
04.
:::::::::VBScript erzeugen - Beginn 
05.
set G=%temp%\GetFileMinutes.vbs 
06.
>%G% echo WScript.Echo DateDiff("n",CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments(0)).DateLastModified,Now()) 
07.
:::::::::VBScript erzeugen - Ende 
08.
 
09.
for /f %%m in ('cscript //nologo %G% "%Datei%"') do set Min=%%m 
10.
echo %Min%
Diese Demo soll für die angegebene Datei das Alter in Minuten liefern - natürlich kannst Du das Ganze auch in einer Schleife für mehrere Dateien verwenden. Nachdem das VBScript am Anfang des Batches erzeugt wurde, etwa so:
for %%i in (%1) do for /f %%m in ('cscript //nologo %G% "%%i"') do if %%m gtr 15 move "%%i" "D:\Zielordner\"
Grüße
bastla
Bitte warten ..
Mitglied: ScoTTy1981
18.01.2009 um 19:41 Uhr
Gude bastla,

sorry das ich den falschen benutzer niedergeschrieben habe.
Leide habe ich von vbs null peilung.

Aber so wie ich das verstehe paste ich folgendes in die vbs:

01.
@echo off & setlocal 
02.
set "Datei=c:\*.*" <<== ist keine sprezifische Datei, am besten wäre es wenn er einen ganzen ordner durchsucht 
03.
 
04.
:::::::::VBScript erzeugen - Beginn 
05.
set G=%temp%\GetFileMinutes.vbs 
06.
>%G% echo WScript.Echo DateDiff("n",CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments(0)).DateLastModified,Now()) 
07.
:::::::::VBScript erzeugen - Ende 
08.
 
09.
for %%i in (%1) do for /f %%m in ('cscript //nologo %G% "%%i"') do if %%m gtr 15 move "%%i" "c:\test\" 
10.
 
11.
echo %Min%

Ist es möglich das die vbs ein transfer.log schreibt in der nur *.csv aufgelistet sind??

Ich kann mich nicht genug bedanken für dein hilfe


Grüße

Marco
Bitte warten ..
Mitglied: bastla
18.01.2009 um 20:23 Uhr
Hallo ScoTTy1981!

sorry das ich den falschen benutzer niedergeschrieben habe.
Dafür musst Du Dich bei Biber entschuldigen ...

Leide habe ich von vbs null peilung.
Das Script wird ja ohnehin durch den Batch erstellt, und für die Verwendung hast Du 2 Beispiele - alles, was Du tun musst, ist, den Rückgabewert in Batch zu übernehmen und auszuwerten ...
Wenn es nur darum geht, alle ".csv"-Dateien eines Ordners mit einem Alter von mehr als 15 Minuten zu verschieben (und nicht darauf geachtet werden muss, ob sich im Zielordner schon eine gleichnamige Datei befindet), sähe das etwa so aus:
01.
@echo off & setlocal 
02.
set "Quelle=D:\Dein Quellpfad" 
03.
set "Maske=*.csv" 
04.
set /a Alter=15 
05.
set "Ziel=D:\Dein Zielpfad" 
06.
set "Log=D:\transfer.log" 
07.
 
08.
set G=%temp%\GetFileMinutes.vbs 
09.
>%G% echo WScript.Echo DateDiff("n",CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments(0)).DateLastModified,Now()) 
10.
 
11.
if not exist "%Ziel%" md "%Ziel%" || echo Zielpfad "%Ziel%" konnte nicht erstellt werden! & pause & goto :eof 
12.
 
13.
for %%i in ("%Quelle%\%Maske%") do ( 
14.
    for /f %%m in ('cscript //nologo %G% "%%i"') do if %%m gtr %Alter% ( 
15.
        move "%%i" "%Ziel%\" && >>"%Log%" echo %%i 
16.
17.
)
Falls das Log bei jedem Start des Batches gelöscht werden soll, noch die folgende Zeile vor der "for"-Schleife in Zeile 13 einfügen:
if exist "%Log%" del "%Log%"
[Edit] Nach nochmaligem Lesen der Problemstellung interpretiere ich das jetzt (hoffentlich richtig) so, dass zwar alle Dateien verschoben, aber nur ".csv"-Dateien geloggt werden sollen - dann:
01.
@echo off & setlocal 
02.
set "Quelle=D:\Dein Quellpfad" 
03.
set "Maske=.csv" 
04.
set /a Alter=15 
05.
set "Ziel=D:\Dein Zielpfad" 
06.
set "Log=%Ziel%\transfer.log" 
07.
 
08.
set G=%temp%\GetFileMinutes.vbs 
09.
>%G% echo WScript.Echo DateDiff("n",CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments(0)).DateLastModified,Now()) 
10.
 
11.
if not exist "%Ziel%" md "%Ziel%" || echo Zielpfad "%Ziel%" konnte nicht erstellt werden! & pause & goto :eof 
12.
 
13.
for %%i in ("%Quelle%\*.*") do ( 
14.
    for /f %%m in ('cscript //nologo %G% "%%i"') do if %%m gtr %Alter% ( 
15.
        move "%%i" "%Ziel%\" && if /i "%%~xi"=="%Maske%" >>"%Log%" echo %time:~,8% %%~nxi 
16.
17.
)
Dafür gibt's jetzt zusätzlich im Log die Angabe der Zeit (wobei diese allerdings für alle im jeweiligen Batchlauf verschobenen Dateien gleich angezeigt wird).
[/Edit]

Grüße
bastla

P.S.: Gepostete Batches sind leichter les- und verwendbar, wenn sie als Code formatiert sind ...
Bitte warten ..
Mitglied: ScoTTy1981
18.01.2009 um 20:49 Uhr
huhu bastla,

das verstehe ich jetzt nicht so ganz, meine das sich das script sich nicht von selbst ausführt ist mir ja klar, aber wie soll denn dann die *.bat aussehen (mit Rückgabewerten??) ??

Sorry für die evenutell DAU fragen *g*

Grüße ScoTTy1981

p.s.: kerl ist ja der hammer ( :D ), jo das kommt so hin, exat so muss der ablauf sein, aber das ausführen macht mir noch probs.. (siehe oben)
Bitte warten ..
Mitglied: bastla
18.01.2009 um 21:00 Uhr
Hallo ScoTTy1981!

im hauptordner sollen alle *.csv und *.pdf's die älter als 15 MInuten sind, in einen anderen ordner verschoben werden. Aber in der transfer.log sollen nur die *.csv drin stehen, da diese von einem Programm ausgelesen werden soll.
Die inzwischen zusätzlich gepostetet Version sollte das bereits so machen (wobei dann die Zeitangabe vermutlich stört - daher ggf den Teil
 "%time:~,8% "
aus der Zeile 15 entfernen).
Nochmals zum VBScript: Mit dem Rückgabewert ist folgendes gemeint: Du ruftst im Batch mit
cscript //nologo %G% "Datei"
das Script auf (wobei "Datei" in diesem Fall eben als Variable "%%i" übergeben wird). Das Script ermittelt das Alter in Minuten und gibt den entsprechenden Wert aus.

Vom Batch übernommen wird diese Minutenanzahl, indem der Script-Aufruf in eine "for"-Schleife verpackt wird:
for /f %%m in ('cscript //nologo %G% "Datei"') do echo %%m
%%m enthält das Alter in Minuten und wird in diesem Beispiel einfach ausgegeben - oben habe ich gezeigt, wie das Alter in eine Variable geschrieben werden kann, und im Batch wird %%m gleich direkt zum Vergleichen mit 15 (Minuten) verwendet.

So oder so - um das Script brauchst Du Dich eigentlich überhaupt nicht zu kümmern ...

Grüße
bastla
Bitte warten ..
Mitglied: ScoTTy1981
18.01.2009 um 21:19 Uhr
hi bastla,

ok das verstehe, das der wert (Zeit) an das vbs script übergeben werden soll. Dort wird es dann berechnet und übt dann die nachfolgenden aktionen aus.

aber mir ist immer noch nicht klar, wie ich die batch schreiben soll, mit den zwei zeilen die du veröffentlichst hast, kann es unmöglich laufen.

Wo gebe ich denn die Scriptdatei "dateproof.vbs" in der batch an und es muss doch eine art zuweisung für die variable "Datei" geben oder sehe ich das falsch

Fragen über fragen, hoffe du hast noch lust zu antworten...

Grüße Scotty1981
Bitte warten ..
Mitglied: bastla
18.01.2009 um 21:34 Uhr
Hallo ScoTTy1981!

Vielleicht zur Sicherheit vorweg: Es geht hier um einen Batch - es gibt für Dich nichts als ".vbs" zu speichern oder zu bearbeiten ...

ok das verstehe, das der wert (Zeit) an das vbs script übergeben werden soll. Dort wird es dann berechnet und übt dann die nachfolgenden aktionen aus.
Keineswegs - an das Script wird der Dateipfad übergeben, das Script ermittelt das Alter, und den Rest erledigt der Batch.

aber mir ist immer noch nicht klar, wie ich die batch schreiben soll, mit den zwei zeilen die du veröffentlichst hast, kann es unmöglich laufen.
Vielleicht testest Du einmal die 17-Zeilen-Version ...

Wo gebe ich denn die Scriptdatei "dateproof.vbs" in der batch an
Das Script wird dynamisch vom Batch selbst im Ordner %temp% erstellt - da es nicht automatisch gelöscht wird, findest Du es dort auch nach dem Ende des Batches unter dem Namen "GetFileMinutes.vbs". Eben dieser Name (bzw der gesamte Pfad zum Script) befindet sich nach der Erstellung in der Variablen %G%, und so wird das Script auch aufgerufen (also nicht als "dateproof.vbs").

es muss doch eine art zuweisung für die variable "Datei" geben oder sehe ich das falsch
Da Du alle Dateien des Quellordners berücksichtigen willst, muss eine Schleife verwendet werden:
for %%i in ("%Quelle%\*.*") do
Damit wird jede Datei (*.*) durch die Schleife erfasst und steht als %%i zur Verfügung. Wenn die erste Datei "test.csv" hieße, würde innerhalb der Schleife dann das Script so aufgerufen:
for /f %%m in ('cscript //nologo %temp%\GetFileMinutes.vbs "D:\Dein Quellpfad\test.csv"') do
Ergebnis dieses Aufrufes wäre dann etwa die Zahl 200, wenn die "test.csv" bereits 200 Minuten alt sein sollte. Dieses Ergebnis steht dann als %%m zur Verfügung.

Zum Rest kannst Du unter "if /?" bzw unter "for /?" (gegen Ende) an der Kommandozeile die Hilfetexte aufrufen ...

Grüße
bastla
Bitte warten ..
Mitglied: ScoTTy1981
18.01.2009 um 21:43 Uhr
ohhhh man ich bin sooooo blöd, klar jetzt weiss ich was du meinst.... *g*
klappt einwandfrei, der hammer, *freu*

nochmals vielen dank bastler für dein verständnis und die geduld :D

Big thx to bastler

Grüße Marco
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Zeitstempel an kopierter Datei
gelöst Frage von RitzratzBatch & Shell4 Kommentare

Hallo, ich kopiere aus einer Quelle Dateien an unterschiedliche Ordner. Dieses Script wird mehrmals am Tag ausgeführt. Die Dateinamen ...

Batch & Shell
Batch vergleiche Dateien mit Zeitstempel
gelöst Frage von Streuner1Batch & Shell5 Kommentare

Hallo, ich möchte mit einer batch in einem Ordner Dateien mit einem Zeitstempel suchen, vergleichen, kopieren und löschen. Möglichkeiten: ...

Batch & Shell
Batchdatei - CSV-Datei umbennen mit Zeitstempel
gelöst Frage von jweghornBatch & Shell7 Kommentare

Hallo zusammen, für mein Problem habe ich hier schon einiges gefunden, wurde aber für exakt meine Vorgabe nicht ganz ...

Batch & Shell
Batchdatei soll überprüfen, ob auf eine Log Datei
Frage von hoppalaBatch & Shell1 Kommentar

Hiho :) ! Ein Freund und ich haben eine Batchdatei erstellt, leider kommen wir bei einer Sache nicht weiter. ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 104 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
Frage von HelloWorldBatch & Shell13 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...