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
Kommentar vom Moderator Biber am 30.06.2011 um 10:42:11 Uhr
Verschoben von "Windows wohl" nach "Batch & Shell"
GELÖST

Dateien nach Monaten in Ordner verschieben

Frage Entwicklung Batch & Shell

Mitglied: ChrisM73

ChrisM73 (Level 1) - Jetzt verbinden

30.06.2011, aktualisiert 10:42 Uhr, 3255 Aufrufe, 20 Kommentare

Hallo wir haben einen Windows 2003 Server, auf dem viele Dateien anfallen, also *.000.
nun wäre ein Skript schön das wenn es gestartet wird die Dateien in Ordner der Monate verschiebt, also eine Ordner anlegt der z.B.: 0611 heißt.
kann mir jemand dabei helfen so eine Batchdatei zu erstellen?

Danke schonmal für euer Hilfe.
Mitglied: Skyemugen
30.06.2011 um 09:01 Uhr
Aloha,

wenn du schon eine batch haben möchtest, solltest du den Beitrag dann auch lieber gleich in den richtigen Bereich verschieben.

Aber zum Punkt: Wonach sollen denn die Daten gefiltert werden, sind es wirklich nur *.000 Dateitypen, kann man sie nur anhand deren Erstellungsdatums sortieren oder geben die Dateinamen Ausschluss, wann entschieden werden soll, in welchen Ordner die kommen?

Ein wenig mehr Details wären schon von Vorteil.

greetz André
Bitte warten ..
Mitglied: Snowman25
30.06.2011 um 09:05 Uhr
Hallo ChrisM73,

Sowas hatten wir hier schon öfter.
Da du nach Hilfe suchst und nicht gleich eine komplett angepasste Lösung bekommst, kannst du das Skript hier etwas abwandeln. Macht auch schöne Ausgaben: Datum aus Datei auslesen, Ordner nach Dateidatum erstellen und Datei dorthin kopieren oder verschieben

Gruß
Snow
Bitte warten ..
Mitglied: Friemler
30.06.2011 um 09:22 Uhr
Hallo ChrisM73,

teste mal das:
01.
If WScript.Arguments.Count > 2 Then 
02.
  Set objFSO         = CreateObject("Scripting.FileSystemObject") 
03.
  Set objSrcDir      = objFSO.GetFolder(WScript.Arguments(1)) 
04.
  Set colAllFiles    = objSrcDir.Files 
05.
 
06.
  For Each objFile In colAllFiles 
07.
    If objFSO.GetExtensionName(objFile.Name) = WScript.Arguments(0) Then 
08.
      strFolderName = Right("0" & Month(objFile.DateCreated), 2) & Right(Year(objFile.DateCreated), 2) 
09.
 
10.
      strDestFolder = objFSO.BuildPath(WScript.Arguments(2), strFolderName) 
11.
 
12.
      If Not objFSO.FolderExists(strDestFolder) Then 
13.
        objFSO.CreateFolder(strDestFolder) 
14.
      End If 
15.
 
16.
      objFile.Move objFSO.BuildPath(strDestFolder, objFile.Name) 
17.
    End If 
18.
  Next 
19.
End If
Code z.B. als MoveFilesByDate.vbs speichern. Aufruf:
cscript /nologo MoveFilesByDate.vbs "Dateityp, z.B. 000" "Quellverzeichnis" "Zielverzeichnis"
Es wird das Datum der Erstellung verwendet (DateCreated in Zeile 8). Wenn das Datum der letzten Änderung verwendet werden soll, stattdessen DateLastAccessed nehmen.

VBScript weil das arbeiten mit Datumswerten in Batch problematisch ist (eingestelltes Datumsformat, Sprachversion von Windows).

Gruß
Friemler
Bitte warten ..
Mitglied: ChrisM73
30.06.2011 um 09:46 Uhr
Hallo Snowman25,

also müßte ich das worker.bat folgendermaßen abändern, damit nur Monate und nicht auch Tage einsortiert werden:

@Echo off
set file=%1
set fdate=%~t1

set fmonth=%fdate:~3,2%
set fyear=%fdate:~6,4%
set folname=%fyear%_%fmonth%_%fday%
:work
if exist %folname%\NUL (
Echo Verschiebe Datei %file% nach %folname%
Echo ----
move %file% "%folname%\"%file%
) else (
Echo Erstelle Verzeichnis %folname%
Echo ----
md "%folname%"
goto work
)

Ich habe noch etwas vergessen und zwar gibts in dem Verzeichnis ca. 5 Dateien die nicht verschoben werden drüfen, kann man die explizit benennen damit dies enicht gelöscht werden?
Bitte warten ..
Mitglied: Snowman25
30.06.2011 um 10:10 Uhr
Zitat von ChrisM73:
Ich habe noch etwas vergessen und zwar gibts in dem Verzeichnis ca. 5 Dateien die nicht verschoben werden drüfen, kann man
die explizit benennen damit dies enicht gelöscht werden?

Wenn deine Files normalerweise *.000-Dateien sind und diese 5 nicht, dann ist das bloß eine sehr kleine Modifikation.

builder.bat:
01.
@Echo off 
02.
for %%a in (*.000) do ( 
03.
	if NOT "%%a"=="builder.bat" ( 
04.
		if NOT "%%a"=="worker.bat" ( 
05.
			Echo. 
06.
			Echo Verarbeite Datei %%a 
07.
			Echo. 
08.
			Echo ________________________________ 
09.
			Echo. 
10.
			call worker.bat "%%a" 
11.
12.
13.
)
worker.bat:
01.
@Echo off 
02.
set file=%1 
03.
set fdate=%~t1 
04.
set fmonth=%fdate:~3,2% 
05.
set fyear=%fdate:~6,4% 
06.
set folname=%fyear%_%fmonth% 
07.
:work 
08.
if exist %folname%\NUL ( 
09.
	Echo Verschiebe Datei %file% nach %folname% 
10.
	Echo ---- 
11.
	move %file% "%folname%\"%file%  
12.
) else ( 
13.
	Echo Erstelle Verzeichnis %folname% 
14.
	Echo ---- 
15.
	md "%folname%" 
16.
	goto work 
17.
)
Funktioniert nur auf einem System mit deutschem Datumsformat (Regionaleinstellungen) richtig!

Gruß
Snow
Bitte warten ..
Mitglied: ChrisM73
30.06.2011 um 10:12 Uhr
es sind 2 *.000 Dateien und eine *.bat Datei.
Bitte warten ..
Mitglied: Snowman25
30.06.2011 um 10:16 Uhr
Das Skript verschiebt jetzt eh bloß *.000 Dateien.
Die 2, die nicht verschoben werden sollen, musst du genauso in der builder.bat 'ausklammern', wie schon worker.bat und builder.bat.
Eigentlich kannst du die Dateinamen in Zeile 3 und 4 gleich gegen deine austauschen.

Gruß
Snow
Bitte warten ..
Mitglied: ChrisM73
30.06.2011 um 10:50 Uhr
habe es also so abgeändert:

@Echo off
for %%a in (*.000) do (
if NOT "%%a"=="xxx.000" (
if NOT "%%a"=="xxx.000" (
if NOT "%%a"=="xxx000" (
Echo.
Echo Verarbeite Datei %%a
Echo.
Echo ________________________________
Echo.
call worker.bat "%%a"
)
)
)
)

den Ordner hat er angelegt aber es kommen folgende Fehlermeldungen:


Ein Unterverzeichnis oder eine Datei mit dem Namen "2011 _06 " existiert bereit
s.
Der Befehl "_06" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Verschiebe Datei "001002E1.000" nach 2011 _06
Das System kann den angegebenen Pfad nicht finden.
0 Datei(en) verschoben.
Erstelle Verzeichnis 2011 _06
Ein Unterverzeichnis oder eine Datei mit dem Namen "2011 _06 " existiert bereit
s.
Der Befehl "_06" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Verschiebe Datei "001002E1.000" nach 2011 _06
Das System kann den angegebenen Pfad nicht finden.
0 Datei(en) verschoben.
Erstelle Verzeichnis 2011 _06
Ein Unterverzeichnis oder eine Datei mit dem Namen "2011 _06 " existiert bereit
s.
Der Befehl "_06" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Bitte warten ..
Mitglied: Snowman25
30.06.2011 um 11:03 Uhr
Gewöhn dir bitte an, Code in < code>-Tags zu schreiben.
führe bitte folgendes aus:
01.
@Echo off 
02.
set file=%1 
03.
set fdate=%~t1 
04.
set fmonth=%fdate:~3,2% 
05.
set fyear=%fdate:~6,4% 
06.
set folname=%fyear%_%fmonth% 
07.
set f 
08.
Echo %date% %time%
Als Aufrufparameter gibst du eine Beliebige Datei an.
Das Ergebnis dann bitte hier posten (in < code>-Tags(!))

Snow
Bitte warten ..
Mitglied: ChrisM73
30.06.2011 um 11:24 Uhr
Hallo also das Ergebnis ist:

E:\Export>test.bat
fmonth=~3,2
folname=~6,4_~3,2
FP_NO_HOST_CHECK=NO
fyear=~6,4
30.06.2011 11:23:55,96
Bitte warten ..
Mitglied: Snowman25
30.06.2011 um 11:28 Uhr
Zitat von Snowman25:
__Als Aufrufparameter gibst du eine Beliebige Datei an.__
Bitte warten ..
Mitglied: ChrisM73
30.06.2011 um 11:33 Uhr
E:\Export>test.bat 00109D36.000
fdate=30.06.2011 10:11
file=00109D36.000
fmonth=06
folname=2011_06
FP_NO_HOST_CHECK=NO
fyear=2011
30.06.2011 11:32:27,42
Bitte warten ..
Mitglied: Snowman25
30.06.2011 um 12:04 Uhr
Zitat von ChrisM73:
E:\Export>test.bat 00109D36.000
fdate=30.06.2011 10:11
file=00109D36.000
fmonth=06
folname=2011_06
FP_NO_HOST_CHECK=NO
fyear=2011
30.06.2011 11:32:27,42

Also läuft doch alles wie es sollte.
Du hast beim kopieren oder so ein Leerzeichen in mein Skript gebracht, dass da nicht hätte sein sollen.
Einfach nochmal beide in die entsprechenden Dateien (worker.bat und builder.bat) kopieren und nochmal versuchen.

Gruß
Bitte warten ..
Mitglied: Skyemugen
30.06.2011 um 12:19 Uhr
Zitat von Snowman25:
Du hast beim kopieren oder so ein Leerzeichen in mein Skript gebracht, dass da nicht hätte sein sollen.

Aloha,

genau deshalb sollte man lieber set "file=%1" etc. machen, denn die Forensoftware hängt gerne mal ein Leerzeichen hinten an

greetz André
Bitte warten ..
Mitglied: Snowman25
30.06.2011 um 12:28 Uhr
Zitat von Skyemugen:
genau deshalb sollte man lieber set "file=%1" etc. machen, denn die Forensoftware hängt gerne mal ein
Leerzeichen hinten an

Ausser, man macht es richig und klickt auf den Quelltext-Link, anstatt die formatierte, lesbar aufbereitete Version zu verwenden.
Bitte warten ..
Mitglied: ChrisM73
30.06.2011 um 12:30 Uhr
ok jetzt hat er die Dateien in den Ordner kopiert, aber die bleiben ja im Hauptverzeichnis stehen, obwohl es doch ein move-Befehl ist, wäre schon besser wenn er die einfach verschieben würde...
Bitte warten ..
Mitglied: Skyemugen
30.06.2011 um 12:37 Uhr
Zitat von Snowman25:
Ausser, man macht es richig und klickt auf den Quelltext-Link, anstatt die formatierte, lesbar aufbereitete Version zu verwenden.

Im Quelltext sind die Leerzeichen meist ebenso ... wer kopiert bitte aus den Codeblöcken? ...
Bitte warten ..
Mitglied: Snowman25
30.06.2011 um 12:47 Uhr
Sollte er auch. Und für sowas ist ja auch die Textausgabe da...
Bitte warten ..
Mitglied: ChrisM73
30.06.2011 um 15:35 Uhr
hm ok stimmt der hat verschoben, allerdings nur einen teil der Dateien, dann hat er abgebrochen. Deshalb dachte ich das die Dateien nur kopiert sind, weil es wirklich sehr viele Dateien sind. Es hat 3 mal abgebrochen, aber nun hat das Programm alles schön verschoben
vielen Dank für deine Hilfe und Geduld.
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung!

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Windows Netzwerk
Dateien und Ordner verschieben mit Rückfrage (1)

Frage von stefts zum Thema Windows Netzwerk ...

Batch & Shell
gelöst Dateien anhand des Namens in neue Ordner verschieben (17)

Frage von Cookiemonster zum Thema Batch & Shell ...

C und C++
Dateien in Ordner kopieren anhand vom Teil eines Dateinamen (22)

Frage von onlyforu8373 zum Thema C und C ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...