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

Dateien Automatisch verschieben und gleich sortieren, nach Datum!

Frage Entwicklung Batch & Shell

Mitglied: Johannes0511

Johannes0511 (Level 1) - Jetzt verbinden

07.05.2014 um 06:53 Uhr, 4319 Aufrufe, 12 Kommentare, 2 Danke

Hallo zusammen,
möchte mit einer Batch Datei automatisch Dateien verschieben/sortiert lassen. Da meine Kenntnisse nicht ausreichen, bitte ich euch um Hilfe.

Die Daten der letzten 30 Tage sollen nicht verschoben werden.
Quelle: C:\VL\HistoricalWaferDataLogs\PM2
Ziel: C:\VL\HistoricalWaferDataLogs\PM2_Archiv_1FVER1\2013\12
….\2013\12 sollen die Daten von 2013 und Dezember rein
….\2014\01 sollen die Daten von 2014 und Januar rein
....\2014\02 usw.

Beispiel der zu verschiebenden Dateien
211F001_seq.test2.04AA.1-13-2011.16-39-44.txt
211F032_seq.b1416098.02AA.4-17-2014.1-22-0.txt
211F032_seq.b1416098.03AA.4-17-2014.1-31-15.txt
clean_seq.unknown carrier-unknown waferAa.11-30-2012.10-22-30.txt
Weis nicht ob es sinnvoll ist den Namen/Datum auszulesen oder Dateiattribute zu gehen.

Vielen Dank schon mal!
Weil ich meine Kenntnisse erweitern will, bitte Batch Datei kommentieren.
Grüße
Walter
Mitglied: colinardo
07.05.2014, aktualisiert um 12:09 Uhr
Hallo Walter, Willkommen im Forum!
Das ließe sich so machen (Kommentare befinden sich im Batch-Code):
01.
@echo off & setlocal ENABLEDELAYEDEXPANSION 
02.
 
03.
:: Quellordner 
04.
set "quelle=C:\VL\HistoricalWaferDataLogs\PM2" 
05.
 
06.
:: Zielordner 
07.
set "ziel= C:\VL\HistoricalWaferDataLogs\PM2_Archiv_1FVER1" 
08.
 
09.
:: durchlaufe alle Dateien die älter als 30 Tage sind und gebe für die FOR-Schleife den Dateinamen und das Änderungsdatum getrennt mit einer Raute aus, für die Trennung in der Schleife 
10.
for /f "tokens=1,2 delims=#" %%a in ('forfiles /D -31 /p "%quelle%" /c "cmd /c echo @file#@fdate" 2^>nul') DO @( 
11.
   
12.
  :: entferne die umschließenden Anführungszeichen aus dem Dateinamen 
13.
  set "file=%%~a" 
14.
 
15.
  :: Variablen für die Teile des Datums setzen 
16.
  set datum=%%b 
17.
  set year=!datum:~6,4! 
18.
  set month=!datum:~3,2! 
19.
   
20.
  :: Zielordner zusammensetzen 
21.
  set "zielordner=%ziel%\!year!\!month!" 
22.
 
23.
  :: Wenn der Ordner noch nicht existiert, erstelle ihn 
24.
  if not exist "!zielordner!" md "!zielordner!" 
25.
 
26.
  :: Verschiebe Datei in den neuen Ordner 
27.
  move "%quelle%\!file!" "!zielordner!" 
28.
)
Solltest du die verzögerte Variablenerweiterung noch nicht kennen, lese Dir mal folgendes Tutorial zur For-Schleife durch, besonders den Abschnitt Exkurs (verzögerte) Variablenerweiterung. Du benötigst für die verzögerte Variablenerweiterung das setlocal ENABLEDELAYEDEXPANSION, und die Variable in der Schleife muss anstatt mit Prozentzeichen mit Ausrufezeichen umschlossen werden. Die Verzögerte Variablenerweiterung bewirkt das alles was zwischen zwei Ausrufezeichen steht erst zur Ausführungszeit des Scripts expandiert wird anstatt schon beim Parsen des Scripts.

Grüße Uwe
Bitte warten ..
Mitglied: Johannes0511
08.05.2014 um 07:20 Uhr
Hallo Uwe,

was soll ich sagen, zuerst war ich zu blöde um das Scrip zu kopieren.
Klicke nicht auf Quelltext und kopiere es so heraus und versuchte es anzupassen.
Bin total begeistert, erstens um die schnelle Hilfe und zweitens und die optimale Lösung.
Verbeuge mich von Dir. Werde mir auf jeden Fall den Link anschauen.

Nochmal Herzlichen Dank
Walter
Bitte warten ..
Mitglied: Johannes0511
09.05.2014 um 07:39 Uhr
Hallo Uwe,

auf "Region und Sprach" Einstellung Deutsch läuft es wunderbar. Benötige es auf Englischen PC (United States) Datum 05/09/2014 MM/DD/YYYY.
Hab zwar die Einstellungen für das Datum gefunden, geht aber nicht.
set year=!date:~10,4!
set month=!date:~4,2!

Könntest du bitte noch nachbessern, darf leider die Tastatur Einstellungen nicht verändern.

Danke
Walter
Bitte warten ..
Mitglied: colinardo
09.05.2014, aktualisiert um 08:45 Uhr
Zitat von Johannes0511:
Deutsch läuft es wunderbar. Benötige es auf Englischen PC (United States)
Datum 05/09/2014 MM/DD/YYYY.
set year=!datum:~6,4!  
set month=!datum:~0,2! 
http://www.dostips.com/DtTipsStringManipulation.php

Grüße Uwe
Bitte warten ..
Mitglied: Johannes0511
09.05.2014 um 09:49 Uhr
Hallo Uwe,

geht auch nicht. Abfrage date gibt folgendes wieder: Fri 05/09/2014.
Kann es sein das bei der englischer Region, Variablen anderes sind.
Hast du eine Batchdatei wo man den Unterschied auslesen kann?

Danke für die Geduld.

Grüße
Walter
Bitte warten ..
Mitglied: colinardo
09.05.2014, aktualisiert um 11:07 Uhr
Zitat von Johannes0511:
geht auch nicht. Abfrage date gibt folgendes wieder: Fri 05/09/2014.
Kann es sein das bei der englischer Region, Variablen anderes sind.
OK dann ist die Einstellung auf dem PC für das kurze Datum vermutlich so eingestellt (Region und Sprache) M/T/JJJJ d.h. die Monate bzw. Tage sind nicht immer zweistellig. Dafür kannst du dieses abgewandelte Script hernehmen:
01.
@echo off & setlocal ENABLEDELAYEDEXPANSION 
02.
 
03.
:: Quellordner 
04.
set "quelle=C:\VL\HistoricalWaferDataLogs\PM2" 
05.
 
06.
:: Zielordner 
07.
set "ziel=C:\VL\HistoricalWaferDataLogs\PM2_Archiv_1FVER1" 
08.
 
09.
:: durchlaufe alle Dateien die älter als 30 Tage sind und gebe für die FOR-Schleife den Dateinamen und das Änderungsdatum getrennt mit einer Raute aus, für die Trennung in der Schleife 
10.
for /f "tokens=1,2,4 delims=#/" %%a in ('forfiles /D -31 /p "%quelle%" /c "cmd /c echo @file#@fdate" 2^>nul') DO @( 
11.
   
12.
  :: entferne die umschließenden Anführungszeichen aus dem Dateinamen 
13.
  set "file=%%~a" 
14.
 
15.
  :: Variablen für die Teile des Datums setzen 
16.
  set month=%%b 
17.
  set year=%%c 
18.
 
19.
  :: Zielordner zusammensetzen 
20.
  set "zielordner=%ziel%\!year!\!month!" 
21.
 
22.
  :: Wenn der Ordner noch nicht existiert, erstelle ihn 
23.
  if not exist "!zielordner!" md "!zielordner!" 
24.
 
25.
  :: Verschiebe Datei in den neuen Ordner 
26.
  move "%quelle%\!file!" "!zielordner!" 
27.
)
Das Script trennt zusätzlich mit den / slashes. Wie die Datumsausgabe erfolgt kannst du mit forfiles manuell auf der Kommandozeile in einem Verzeichnis testen:
forfiles /c "cmd/c echo @fdate"
Mit Powershell ist das alternativ auch ein Kinderspiel und Sprachunabhängig, wenn du etwas fortschrittlicher agieren willst:
01.
$quelle = "C:\VL\HistoricalWaferDataLogs\PM2" 
02.
$ziel = "C:\VL\HistoricalWaferDataLogs\PM2_Archiv_1FVER1t" 
03.
$files = dir $quelle | ?{!$_.PSIsContainer -and $_.LastWriteTime -lt (get-date).AddMonths(-1)} 
04.
foreach($file in $files){ 
05.
    $newfolder = "$ziel\$($file.LastWriteTime.Year)\$($file.LastWriteTime.Month)" 
06.
    if (!(Test-Path $newfolder)){md $newfolder -Force} 
07.
    move-item $file.FullName $newfolder -Force 
08.
}
Grüße Uwe
Bitte warten ..
Mitglied: Johannes0511
09.05.2014 um 12:08 Uhr
Hallo Uwe,

wenn ich den Befehl „forfiles /c "cmd/c echo @fdate"
„ in einen DosBox ausführe, kommt die Fehlermeldung.
'forfiles' is not recognized as an internal or external command,
operable program or batch file
Für Powershell ist das System (Win XP SP3) zu alt und das zweite Skript geht leider nicht.
Wäre super wenn es laufen würde. Gibt es nicht ein Skript wo einfacher aufgebaut ist. Mit dem Datum habe ich verstanden wie es ausgebaut ist.

Grüße
Walter
Bitte warten ..
Mitglied: colinardo
09.05.2014, aktualisiert um 12:12 Uhr
Zitat von Johannes0511:
(Win XP SP3)
das hätte man wissen müssen ...
Für Powershell ist das System (Win XP SP3) zu alt und das zweite Skript geht leider nicht.
Powershell auf XP ? kein Problem ! .... http://www.microsoft.com/en-us/download/details.aspx?id=16818
Wäre super wenn es laufen würde. Gibt es nicht ein Skript wo einfacher aufgebaut ist.
melde mich später nochmal ...

Grüße Uwe
Bitte warten ..
Mitglied: colinardo
09.05.2014 um 13:04 Uhr
dann mach's halt mit VBS:
01.
Const quelle = "C:\VL\HistoricalWaferDataLogs\PM2" 
02.
Const ziel = "C:\VL\HistoricalWaferDataLogs\PM2_Archiv_1FVER1" 
03.
 
04.
Set fso = CreateObject("Scripting.Filesystemobject") 
05.
For Each f In fso.GetFolder(quelle).Files 
06.
	If f.DateLastModified < DateAdd("m",-1,Now()) Then 
07.
		newPath = ziel & "\" & Year(f.DateLastModified) & "\" & Month(f.DateLastModified) 
08.
		 
09.
		If Not fso.FolderExists(ziel & "\" & Year(f.DateLastModified)) Then  
10.
			fso.CreateFolder(ziel & "\" & Year(f.DateLastModified)) 
11.
		End If 
12.
		If Not fso.FolderExists(newPath) Then  
13.
			fso.CreateFolder(newPath) 
14.
		End If 
15.
		fso.MoveFile f.Path, newPath & "\" 
16.
	End If 
17.
Next 
18.
MsgBox "Fertig"
Denke das ist jetzt genug Stoff für dich ...

Grüße Uwe
Bitte warten ..
Mitglied: Johannes0511
09.05.2014 um 15:56 Uhr
Hallo Uwe,

nochmals vielen Dank, Funktioniert super und Stoff ist auch genug.
Da bin ich ja noch Meilenwert entfernt um das zu verstehen.

Grüße
Walter
Bitte warten ..
Mitglied: Johannes0511
30.05.2014 um 14:27 Uhr
Hallo Uwe,

ich schon wieder. Hätte schon wieder eine bitte, ob du mir nochmals behilflich sein kannst.
1.
Wäre es Dir Möglich die beiden Batch „Powershell und VBS“ so abzuändern, das nur die Dateien Kopiert und sortiert werden. Also nichts mehr verschoben wird.
Im Hauptordner liegen > 10.000 Dateien und diese möchte ich aufs Netz Sichern. Diese Batch wird jedem Tag laufen und soll dann nur die neu dazugekommenen Dateien kopieren und einsotieren.
2.
Gibt es noch eine einfachere Lösung, Netzlaufwerke zu verbinden?
versteckte share freigabe?
if exist X:\ net use X: /delete /YES
if exist X:\ subst X: /D
net use x: \\servername\freigabe kennwort /user:username
3.
Wäre es auch Möglich mir zu zeigen, wie man die automatisch angelegten Ordner, mit Datum abändert.
Wenn ich zum bespiel so sortiert haben will 2014-01
2014-02
Verstehe leider die Batch nicht so richtig.

Vielen Dank
Walter
Bitte warten ..
Mitglied: colinardo
30.05.2014, aktualisiert um 14:49 Uhr
Moin Walter,
Zitat von Johannes0511:
Wäre es Dir Möglich die beiden Batch „Powershell und VBS“ so abzuändern, das nur die Dateien Kopiert
und sortiert werden. Also nichts mehr verschoben wird.
hier schon mal die Powershell-Variante, VBS mach ich ein anderes mal.
01.
$quelle = "C:\VL\HistoricalWaferDataLogs\PM2" 
02.
$ziel = "C:\VL\HistoricalWaferDataLogs\PM2_Archiv_1FVER1t" 
03.
$files = dir $quelle | ?{!$_.PSIsContainer -and $_.LastWriteTime -lt (get-date).AddMonths(-1)} 
04.
foreach($file in $files){ 
05.
    $newfolder = "$ziel\$($file.LastWriteTime.Year)\$($file.LastWriteTime.Month)" 
06.
    if (!(Test-Path $newfolder)){md $newfolder -Force} 
07.
    if (!(Test-Path "$newfolder\$($file.Name)")){ 
08.
        copy-item $file.FullName $newfolder -Force 
09.
10.
}
Gibt es noch eine einfachere Lösung, Netzlaufwerke zu verbinden?
was meinst du mit einfacher ?? Ein bisschen Kopf anstrengen musst du schon
Wäre es auch Möglich mir zu zeigen, wie man die automatisch angelegten Ordner, mit Datum abändert.
Wenn ich zum bespiel so sortiert haben will 2014-01
2014-02
Im obigen Powershell-Script ist das diese Zeile
$newfolder = "$ziel\$($file.LastWriteTime.Year)\$($file.LastWriteTime.Month)"
für dein Beispiel würde diese Zeile dann so aussehen:
$newfolder = "$ziel\$(get-date $file.LastWriteTime -Format 'yyyy-MM')"
Grüße Uwe
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Dateien nach Datum verschieben
Frage von LKDNDK12Batch & Shell4 Kommentare

Hallo Community, ich habe folgendes Problem: ich muss Dateien mit dem Kriterium Speicherdatum verschieben. Die Ordnerstruktur: H:\Zaehlerdaten\Auslesung1\32.21.54\log\year\ (danach noch ...

Batch & Shell
Dateien mit neusten Datum in Tagesordner verschieben
gelöst Frage von kaiuwe28Batch & Shell1 Kommentar

Hallo zusammen, ich habe mich gerade an einer kleinen Batch-Datei versucht, komme aber bei einen kleinen Punkt nicht weiter. ...

Batch & Shell
Batch, um Dateien bis zu einem bestimmten datum zu verschieben ...
Frage von goodbytesBatch & Shell3 Kommentare

Hallo, vielleicht hat ein Batch-Profi da einen schnellen Tipp, bevor ich da ewig bastle Ich habe einen Ordner mit ...

Windows Server
Windows Updates nach Datum sortieren
Frage von RG2525Windows Server2 Kommentare

Hallo, Ich muss auf einem Windows Server 2008 R2 ca. 130 ausstehende Updates installieren. Alle Updates auf einmal zu ...

Neue Wissensbeiträge
Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 1 StundeHumor (lol)2 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 16 StundenMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 17 StundenSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Administrator.de Feedback

Entwicklertagebuch: Die Startseite wurde überarbeitet

Information von admtech vor 19 StundenAdministrator.de Feedback10 Kommentare

Hallo Administrator User, mit dem Release 5.7 haben wir unsere Startseite überarbeitet und die Beiträge und Fragen voneinander getrennt. ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows Netzwerk
Netzwerk Neustrukturierung
Frage von IT-DreamerWindows Netzwerk16 Kommentare

Hallo verehrte Community und Admins, bei uns im Haus steht eine Neustrukturierung an. Dafür benötige ich von euch ein ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Linux
OpenSource Groupware
Frage von FA-jkaLinux13 Kommentare

Hallo, ich suche eine Groupware als Alternative zum Exchange. Wesentliche Aufgaben sind die Handhabung von E-Mails (persönliche und gemeinsam ...