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

Per Script Dateien aus verschiedenen Verzeichnissen zusammensuchen

Frage Entwicklung Batch & Shell

Mitglied: chb1982

chb1982 (Level 2) - Jetzt verbinden

04.02.2010 um 09:11 Uhr, 7506 Aufrufe, 7 Kommentare

Moin,

der Titel sagt schon einiges aus. Ich möchte aus allen Unterverzeichnissen unter z.B. d:\daten\ alle Dateien in ein Verzeichnis kopieren wo diese dann weiter verarbeitet werden.

Die Herausforderung bei der Sache ist, dass die Daten im Zielverzeichnis nach der eigentlichen Verarbeitung gelöscht werden, aber trotzdem nicht wieder neu aus dem Quellverzeichnis geholt werden dürfen.

Hat jemand eine Idee, wie man das realisieren kann?


Das einzige, was mir einfällt wäre ein kleiens Tool, z.B. in VB, das die schon einmal kopierten Daten in einer Textdatei dokumentiert und beim nächsten Durchlauf damit abgleicht.
Ich würde es aber lieber mit einer Batch lösen zumal der Abgleich mit einer Textdatei mit der Zeit extrem langsam werden könnte.
Mitglied: H41mSh1C0R
04.02.2010 um 09:25 Uhr
Um wieviele Dateien geht es denn?

Les doch die vom Zielordner Verzeichnisstruktur ein und leg dir die Struktur in einer Textdatei ab.
Danach liest du die Struktur vom Quellordner und kopierst nur die die beim Diff übrigbleiben.
Nach dem Kopieren aktualisierst du die Strukturdatei des Zielordners wieder und fährst analog mit dem nächsten Quellordner fort.
Bitte warten ..
Mitglied: chb1982
04.02.2010 um 09:32 Uhr
Hi,

das sind nicht viele Daten.Im Moment etwa 50 Verzeichnisse mit jeweils max. 20 Dateien.

Im Zielordner sollen die Dateien aus den Unterordnern aber ohne Unterordner abgelegt werden. Also alle in ein Verzeichnis. Die Dateinamen sind eindeutig, das sollte keine Probleme geben.
Bitte warten ..
Mitglied: 76109
04.02.2010 um 11:56 Uhr
Hallo morpheus31337!

Eventuell, könnte man bei den bereits kopierten Dateien einfach nur das Archiv-Attribut löschen?

Gruß Dieter
Bitte warten ..
Mitglied: chb1982
04.02.2010 um 12:53 Uhr
Hi,

das bringt dann aber leider die Datensicherung durcheinander. Ausserdem ist mir das zu unischer wenn aus irgendwelchen Gründen das Bit wieder gesetzt wird und er nochmal über alle Dateien fegt...
Bitte warten ..
Mitglied: 76109
04.02.2010 um 20:26 Uhr
Hallo morpheus31337!

Zitat von chb1982:
das bringt dann aber leider die Datensicherung durcheinander. Ausserdem ist mir das zu unischer wenn aus irgendwelchen
Gründen das Bit wieder gesetzt wird und er nochmal über alle Dateien fegt...
War nur eine Möglichkeit mit Fragezeichen
Ich würde es aber lieber mit einer Batch lösen zumal der Abgleich mit einer Textdatei mit der Zeit extrem langsam werden könnte.
Gerade dann sollte es mit VBS wesentlich schneller gehen

Also, ich habe mal ein kleines VB-SKript (*.vbs) zum testen gebastelt.

Das Skript erstellt/ersetzt in jedem Unterordner, in denen die zu kopierende Dateien stehen, eine Log-Datei mit der Erstellungszeit (Speicherzeit auf Datenträger) der zuletzt erstellten kopierten Datei im DateTime-Format "04.02.2010 19:14:23". D.h. beim starten des Skripts werden alle Dateien, die sich aktuell im Ordner befinden, mit der zuletzt gespeicherten Erstellungszeit in der Logfile verglichen und die Dateien, die nach dieser Zeit gespeichert wurden, in den Kopie-Ordner kopiert und die Erstellungszeit der zuletzt gespeicherten Datei wieder in die Log-Datei geschrieben. Sofern die Neu dazukommende Dateien nicht im Sekundentakt gespeichert werden, sollte das eigentlich funktionieren.

Das Skript muss sich im Haupt-Ordner "..\Test\Daten" befinden, wobei das Skript den Speicherort automatisch ermittelt und alle Unter-Ordner (1. Ebene) in diesem Ordner ausliest und die darin befindlichen Datei entsprechend kopiert. Der Kopie-Ordner darf sich logischerweise nicht in der Ordnerstruktur von "..\Test\Daten" befinden. Beispiel wäre hier "..\Test\Kopien\".

Die Konstanten entsprechend anpassen (Backslash LogFile am Anfang und CopyFolder am Ende beachten):
01.
Const FileTyp = "txt"					'Nur Textdateien  
02.
Const LogFile = "\LastFile.Log"				'Zeit der zuletzt erstellten Datei 
03.
Const CopyFolder = "C:\Test\Kopien\"			'Pfad der Kopie-Dateien 
04.
 
05.
Dim Fso, Path, SubFolder, File, Log, OldTime, NewTime 
06.
 
07.
Set Fso = CreateObject("Scripting.FileSystemObject") 
08.
 
09.
Path = Fso.GetParentFolderName(WScript.ScriptFullName) 
10.
     
11.
OldTime = CDate("01.01.1980") 
12.
NewTime = CDate("01.01.1980") 
13.
     
14.
For Each SubFolder In Fso.GetFolder(Path).SubFolders 
15.
    Log = SubFolder & LogFile 
16.
 
17.
    If Fso.FileExists(Log) Then OldTime = CDate(Fso.OpenTextFile(Log).ReadLine) 
18.
 
19.
    For Each File In SubFolder.Files 
20.
        If LCase(Fso.GetExtensionName(File.Name)) = LCase(FileTyp) Then 
21.
            If File.DateCreated > NewTime Then NewTime = File.DateCreated 
22.
            If File.DateCreated > OldTime Then Fso.CopyFile File.Path, CopyFolder 
23.
        End If 
24.
    Next 
25.
         
26.
    Set File = Fso.CreateTextFile(Log):  File.WriteLine NewTime:  File.Close 
27.
Next
Gruß Dieter
Bitte warten ..
Mitglied: chb1982
05.02.2010 um 10:15 Uhr
Also ich habe das jetzt so gelöst.
Es gibt ein Textfile, das alle Dateinamen enthält, die bereits kopiert wurden. In meinem Fall sind die Dateinamen eindeutig daher ist das kein Problem.
Ansonsten müsste man den kompletten Pfad nehmen.

Nun gehe ich alle Unterzeichnisse durch und suche für jede gefundene Datei einmal die Textdatei durch ob diese schon einmal kopiert wurde.
Wider erwarten läuft das doch recht zügig.

Die fest codierten Pfade etc. entferne ich natürlich noch

01.
 Private Function copy_data() As Integer 
02.
        My.Computer.FileSystem.CopyFile("c:\Destination\merkfile.ini", "c:\Destination\vergfile.ini", True) 
03.
        Dim sw As New StreamWriter("c:\Destination\merkfile.ini", True) 
04.
 
05.
        Dim filename As String 
06.
        Dim actCopy As Boolean 
07.
 
08.
        For Each sFile In My.Computer.FileSystem.GetFiles(sPath, FileIO.SearchOption.SearchAllSubDirectories, "*.*") 
09.
            filename = My.Computer.FileSystem.GetName(sFile) 
10.
            Dim sr As New StreamReader("c:\Destination\vergfile.ini") 
11.
            Do While Not sr.EndOfStream 
12.
                If sr.ReadLine = filename Then 
13.
                    actCopy = False 
14.
                    Exit Do 
15.
                Else : actCopy = True 
16.
                End If 
17.
            Loop 
18.
 
19.
            If actCopy = True Then 
20.
                ListBox1.Items.Add(My.Computer.FileSystem.GetName(sFile)) 
21.
                My.Computer.FileSystem.CopyFile(sFile, dPath + My.Computer.FileSystem.GetName(sFile), True) 
22.
                sw.WriteLine(My.Computer.FileSystem.GetName(sFile)) 
23.
            End If 
24.
            sr.Close() 
25.
        Next 
26.
        sw.Close() 
27.
        My.Computer.FileSystem.DeleteFile("c:\Destination\vergfile.ini") 
28.
        MsgBox("Copy abgeschlossen", MsgBoxStyle.Information, AcceptButton) 
29.
    End Function
Bitte warten ..
Mitglied: Sirius2002
16.05.2012 um 12:44 Uhr
Hallo,

der Beitrag ist zwar schon ziemlich alt jedoch hat er mir damals weitergeholfen.
Kann man das erste Skript auch so umbauen, dass es noch auf eine weitere Ebene an Unterodnern zugreift.

Sprich:
Hauptverzeichnis mit Skript
- Unterordner 1
-- mehrere Unterordner mit den *.txt Dateien
- Unterordner 2
-- mehrere Unterordner mit den *.txt Dateien

Vorher war es ja so:
Hauptverzeichnis mit Skript
- mehrere Unterordner mit den *.txt Dateien

Danke für die Hilfe,
Sirius2002
Bitte warten ..
Ähnliche Inhalte
Windows 7
Verzeichnisse per Script erstellen und Dateien dort hinkopieren
gelöst Frage von peter58haWindows 72 Kommentare

Hallo zusammen! Ich kenne mich mit einfachen BATCH-Dateien aus, aber mit WSH oh - gar nicht! Folgendes möchte ich ...

Batch & Shell
Mehrere Verzeichnisse in einen Script angeben
gelöst Frage von KnuefiBatch & Shell17 Kommentare

Hallo zusammen, ich brauche eure Hilfe. Ich habe unten stehendes Script zum löschen ältere Dateien in einen Unterordner. Nun ...

PHP
Ein Script, verschiedene Intervalle für Cronjob
gelöst Frage von tsunamiPHP7 Kommentare

Hallo, ich habe mal wieder einen Denkhänger. Eine Seite mit Scripten soll via Cronjob aufgerufen werden. Soweit klar. Nun ...

Batch & Shell
Inhalt verschiedener Verzeichnisse auf min-max Dateien überwachen bzw. löschen
gelöst Frage von BlattlausOGBatch & Shell2 Kommentare

Guten Abend, ich müsste nochmals eure Hilfe aufsuchen um mein Vorhaben umsetzten zu können. Funktionalität: Das Script soll alle ...

Neue Wissensbeiträge
Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 21 StundenMicrosoft Office8 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 23 StundenDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 1 TagSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Microsoft Office

Outlook 2016 - Beim Weiterleiten keine PDF Anhänge mehr - KB4011626 entfernen

Erfahrungsbericht von Deepsys vor 1 TagMicrosoft Office3 Kommentare

Wenn ihr feststellt das ihr beim Weiterleiten von E-Mails keine PDF Anhänge mehr versendent, dann dankt Microsoft. Diese tolle ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner14 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...