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, 2158 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 ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Microsoft Office
Excel VBA "SVERWEIS" über mehrere Dateien in Ordner (2)

Frage von Acht85 zum Thema Microsoft Office ...

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

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

Frage von batchnewbie zum Thema VB for Applications ...

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

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...