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 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, 2554 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 (3)

Frage von sbsnewbie zum Thema Batch & Shell ...

Batch & Shell
Dateien im Ordner auslesen und umbennen (10)

Frage von jocheng zum Thema Batch & Shell ...

VB for Applications
gelöst Excel VBA Eine oder mehrere Zellen Verschieben (2)

Frage von batchnewbie zum Thema VB for Applications ...

Batch & Shell
Datei nach Erstellungsdatum verschieben (2)

Frage von Kugelschreiber1 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Linux Netzwerk

Ping und das einstellbare Bytepattern

(1)

Erfahrungsbericht von LordGurke zum Thema Linux Netzwerk ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(3)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
SAN, NAS, DAS
MSA 2050 RAID Konfig (27)

Frage von Leo-le zum Thema SAN, NAS, DAS ...

Microsoft Office
Office Druck fehler (12)

Frage von DaistwasimBusch zum Thema Microsoft Office ...

Festplatten, SSD, Raid
Uninitialisierte Festplatte - Daten retten (11)

Frage von peterla zum Thema Festplatten, SSD, Raid ...

Netzwerkmanagement
Windows Server 2008 R2: "netsh reset" nicht verfügbar? (11)

Frage von RickTucker zum Thema Netzwerkmanagement ...