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
Kommentar vom Moderator Biber am 19.11.2014 um 19:07:40 Uhr
VBA - VBS : Umbennen und Verschieben von Dateien in Loop
set /a rgc+=1
#899

wir bekommen auch die 1000 noch voll während Merkels Amtszeit...
GELÖST

VBA - VBS : Umbennen und Verschieben von Dateien in Loop

Frage Entwicklung VB for Applications

Mitglied: E.Wind

E.Wind (Level 1) - Jetzt verbinden

19.11.2014 um 15:19 Uhr, 2707 Aufrufe, 4 Kommentare, 2 Danke

Hallo zusammen,

folgende Situation habe ich:

Warenwirtschaftssystem erzeugt eine sog. Pollingdatei für DHL Easylog, bisher war es so, das diese Datei vom Namen her Eindeutig war nämlich "EasyLog_0815.csv" das 0815 steht hier für die Mandanten ID aus der WaWi. Nun gab es ein lustiges Software Update und der Dateiname ist nun zufällig generiert und sowas wie "11510307_83aff66ea0bd6e54ae48182b730b3098_0.csv" kommt dabei heraus. Nun brauche ich aber den Dateinamen inkl. Mandanten ID damit ich beim Verpacken unterscheiden kann, ob ich ein Paket für Firma A, B, C oder D verschicke, da wir deren Kundennummern in unserem Easylog hinterlegt haben.

Was ich machen kann ist, ich kann die .csv für jeden Mandanten in einen anderen Ordner speichern, damit das Polling funktioniert möchte ich also aus "C:\DHL\0815\irgendwas.csv" die Datei umbenennen und sie zu "C:\DHL\EasyLog_0815.csv" machen.

Theoretisch fertig habe ich eine Batch Datei die zumindest mal das Umbenennen erledigt

@echo off
rename C:\DHL\*.csv EasyLog_0815.csv
move C:\DHL\EasyLog_0815.csv "C:\Test\0815\" /D /E /Y

Das Verschieben macht er auch hier nicht...

Da eine in Dauerschleife laufende Batch ja doch recht Ressourcen intensiv ist, dachte ich ein VB Script wäre die bessere Lösung um sowas zu handhaben. Leider ist mein VB nicht wirklich vorhanden, das bisschen das ich kann reicht grade so aus um in einem vorhanden Code herum zu stochern und Anpassungen vorzunehmen.

das ist was ich bisher versucht habe:

Private Sub TestSub()
Dim strOldFile As String
Dim strNewFile As String

strOldFile = Environ$("C:\DHL\0815") & "\*.csv"
strNewFile = Environ$("C:\DHL") & "\EasyLog_0815.csv"

Name strOldFile As strNewFile
End Sub

Next

Wscript.Sleep 1000

Loop

Wie gesagt, da mein VB nicht vorhanden ist, blicke ich auch nicht durch wo der Fehler ist, ich hoffe das ich bei euch Hilfe finden kann.

Vielen Dank vorab und nochmal Verzeihung für meine völlige Inkompetenz.
Mitglied: colinardo
19.11.2014, aktualisiert um 18:56 Uhr
Hallo E.Wind,
mit VBS etwa so:
Hinweis: im Eingabe-Verzeichnis werden nur die Unterordner der ersten ebene auf neue CSV-Dateien überprüft.
Also z.B.
  • C:\DHL\0815
  • C:\DHL\5586
  • etc

Einmal gestartet läuft es still im Hintergrund und überprüft alle 5 Sekunden auf neue CSV-Dateien. Zum Beenden muss es dann im Taskmanager gekillt werden.
01.
On Error Resume Next 
02.
' Ordner dessen Unterordner der ersten Ebene überprüft werden sollen 
03.
Const FOLDERIN = "C:\DHL" 
04.
'Ordner in den die CSV-Dateien verschoben werden 
05.
Const FOLDEROUT = "C:\DHL" 
06.
'Interval der Überprüfung (in sek.) 
07.
Const INTERVAL = 5 
08.
Dim strNewFile, fso, folder, file, intCount 
09.
Set fso = CreateObject("Scripting.Filesystemobject") 
10.
While True 
11.
	For Each folder In fso.GetFolder(FOLDERIN).SubFolders 
12.
		If folder.Files.Count > 0 Then 
13.
			For Each file In folder.Files 
14.
				If LCase(fso.GetExtensionName(file.Name)) = "csv" Then 
15.
					strNewFile = FOLDEROUT & "\Easylog_" & folder.Name & ".csv" 
16.
					intCount = 1 
17.
					While (fso.FileExists(strNewFile)) 
18.
						strNewFile = FOLDEROUT & "\Easylog_" & folder.Name & "_(" & intCount & ").csv" 
19.
						intCount = intCount + 1 
20.
					Wend 
21.
					fso.MoveFile file.Path, strNewFile 
22.
				End If 
23.
			Next 
24.
		End If 
25.
	Next 
26.
	WScript.Sleep(INTERVAL * 1000) 
27.
Wend
Alternativ geht das noch effizienter auch mit einem Powershell-Script. Es überwacht im Beispiel die Unterordner des Ordners C:\Mandaten mit einem Filesystemwatcher auf neu angelegte CSV-Dateien.
Also z.B.
  • C:\Mandanten\0815\11510307_83aff66ea0bd6e54ae48182b730b3098_0.csv
  • C:\Mandanten\5586\11599811_83aff66ea0bd6e7d77e7182b730b3098_0.csv
Sobald eine neue CSV-Datei darin landet wird sie umbenannt nach Easylog_[MANDANTENID].csv, falls im Zielordner schon eine solche Datei liegt wird der neuen Datei eine Nummer angängt Easylog_[MANDANTENID]_(1).csv .(Optional könnte man hier auch den Inhalt in die bereits bestehende Datei transferieren, falls das gewünscht ist)
(Wichtig: Das Mandanten-Verzeichnis sollte bei diesem Script nicht in dem Ausgabe-Ordner für die CSV-Dateien liegen)
01.
# Ordner dessen Unterordner auf neue CSV-Dateien überwacht wird 
02.
$folderMonitor = 'C:\Mandanten' 
03.
# Ordner in den die unbenannten CSV-Dateien verschoben werden 
04.
$global:folderOUT = 'C:\DHL' 
05.
if ((Get-EventSubscriber "CSV_Watcher" -ErrorAction SilentlyContinue)){Unregister-Event "CSV_Watcher"} 
06.
#Filewatcher erstellen 
07.
$watcher = New-Object System.IO.FileSystemWatcher $folderMonitor,'*.csv' -Property @{IncludeSubDirectories=$true} 
08.
 
09.
# Filesystem-Watcher registrieren 
10.
Register-ObjectEvent $watcher "Created" -SourceIdentifier "CSV_Watcher" -Action { 
11.
    Try{ 
12.
        $obj = $Event.SourceEventArgs 
13.
        # Mandanten-Ordner extrahieren 
14.
        $mandant = $obj.Name.Split("\")[0] 
15.
        # Zieldatei zusammensetzen 
16.
        $targetfile = "$($global:folderOUT)\Easylog_$mandant.csv" 
17.
        # Für den Fall das die Zieldatei schon existiert hänge eine Zahl an 
18.
        $cnt = 0 
19.
        while((Test-Path $targetfile)){ 
20.
            $cnt++ 
21.
            $targetfile = "$($global:folderOUT)\Easylog_$($mandant)_($($cnt)).csv" 
22.
23.
        # Verschiebevorgang 
24.
        move-item $obj.FullPath $targetfile -Force 
25.
        # Console-Logging 
26.
        write-host "Verschiebe Datei '$($obj.FullPath)' nach '$targetfile'" -ForegroundColor Green 
27.
    }catch{ 
28.
        write-host "Fehler: $($_.Exception.Message)" -ForegroundColor Red 
29.
30.
31.
cls 
32.
write-host "Warte auf neue Dateien ..." -ForegroundColor Yellow 
33.
while($true){sleep(1)}
Das Powershell-Script muss nur einmal gestartet werden und überwacht dann permanent den angegebenen Ordner.
powershell.exe -ExecutionPolicy ByPass -File C:\csv_monitor.ps1
Grüße Uwe
Bitte warten ..
Mitglied: E.Wind
20.11.2014 um 08:59 Uhr
Hallo Uwe,

das ist perfekt, ich werde die Lösung 2 mit dem Powershell-Script verwenden und dann nur noch einen Task schreiben, der das ganze bei Rechnerstart ausführt. damit die Kollegen im Lager keinen Nerv darauf verschwenden müssen das erst jeden Morgen zu starten.

Eine Frage hätte ich noch, kann man das Script auch Unsichtbar für den Anwender im Hintergrund laufen lassen? Wie gesagt es wird auf einem Rechner im Lager ausgeführt und jedes Fenster kann potentiell geschlossen werden...

Auf jedenfall DANKE für die schnelle und vorallem geniale Hilfe, Deine Lösung kann mehr als ich überhaupt gehofft habe durchführen zu können.

Grüße

Eric
Bitte warten ..
Mitglied: colinardo
20.11.2014, aktualisiert um 09:13 Uhr
Hallo Eric,
Eine Frage hätte ich noch, kann man das Script auch Unsichtbar für den Anwender im Hintergrund laufen lassen?
ja, mit dem zusätzlichen Parametern
-WindowStyle Hidden -NonInteractive
, oder benutze im Task-Scheduler einfach einen anderen Benutzeraccount ( achte auf genügend Rechte), dann ist es nicht mehr sichtbar.

Grüße Uwe
Bitte warten ..
Mitglied: colinardo
22.11.2014 um 09:04 Uhr
Bitte den Beitrag dann noch als gelöst markieren. Merci.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Dateien umbennen und verschieben mit bash
Frage von sbsnewbieBatch & Shell3 Kommentare

Hallo Admisn, ich suche gerade nach einer Lösung für folgendes Problem: Ich habe zwei Dateien einmal 1. neue datei_datum_uhrzeit.txt ...

VB for Applications
VBS oder Batch um eine Datei in Unterordner zu verschieben
Frage von MrRoyalVB for Applications1 Kommentar

Hallo zusammen, ich bin neu hier und kenne mich leider im Bereich VBS und Batch nicht so gut aus. ...

Batch & Shell
Batch: Loop zum kopieren von Dateien
gelöst Frage von BiffBaffBatch & Shell1 Kommentar

Hallo zusammen, leider bin ich nicht sehr vertraut mit dem erstellen von Batch dateien daher mag die Frage vielleicht ...

Batch & Shell
Dateien im Ordner auslesen und umbennen
Frage von jochengBatch & Shell10 Kommentare

Hi Leute Schönen Feiertag zuerst. Ich habe an diesem leider ein Problem. nutze ich um Bilder aus meinem Bilder ...

Neue Wissensbeiträge
Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 3 StundenMicrosoft Office13 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 8 StundenErkennung und -Abwehr2 Kommentare

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücken Spectre, Meltdown ...

Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 1 TagMicrosoft Office10 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 1 TagDatenbanken

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

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, ...

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

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

Batch & Shell
Dateien verschieben mit batch
gelöst Frage von michi-ffmBatch & Shell13 Kommentare

Hallo Zusammen hat jemand evtl eine Idee? Zunächst hier das Skript: Leider werden keine UNC-Pfade unterstüzt, kann mir jemand ...