eazy-isi
Goto Top

Dateien verschieben und umbenennen

Hallo zusammen,


ich stehe vor folgender Herausforderung.
Ich muss aus einem Verzeichnis Dateien in ein anderes Verzeichnis verschieben und dabei umbenennen.
Hierbei muss überprüft werden ob die Datei im Zielverzeichnis bereits existiert, wenn ja soll 40sec gewartet werden und
dann erneut versucht werden.
Hier mal ein Beispiel was gemeint ist:
Im Source Verzeichnis liegen Dateien mit folgender Benennung.

d:\out\r1.mmm1122.rtz.ghl
d:\out\r1.mmm1122.rtz.ghl_01
d:\out\r1.mmm1122.rtz.ghl_02
d:\out\r1.mmm1122.rtz.ghl_03

Diese sollen dann nacheinander in ein anderes Verzeichnis verschoben werden allerdings ohne den Zähler.

d:\out\r1.mmm1122.rtz.ghl ==> d:\transfer\r1.mmm1122.rtz.ghl
d:\out\r1.mmm1122.rtz.ghl_01 ==> d:\transfer\r1.mmm1122.rtz.ghl
d:\out\r1.mmm1122.rtz.ghl_02 ==> d:\transfer\r1.mmm1122.rtz.ghl
d:\out\r1.mmm1122.rtz.ghl_03 ==> d:\transfer\r1.mmm1122.rtz.ghl

Vielleicht hat jemand einen Tip für mich wie sowas zu realisieren ist.

Danke im Voraus!

Content-ID: 278698

Url: https://administrator.de/contentid/278698

Ausgedruckt am: 24.11.2024 um 10:11 Uhr

ChrisDynamite
ChrisDynamite 29.07.2015 um 15:20:32 Uhr
Goto Top
Guten Tag,

einfach zu realisieren per Autoit, da es für alle deine Fälle Methoden gibt, welche nur noch richtig programimert werden müssen. Ich schätze max. 20 Zeilen Code.

Grüße Chris
ChrisDynamite
ChrisDynamite 29.07.2015 um 15:22:10 Uhr
Goto Top
Wenn der Zähler immer den gleichen Raum einnimmt, bsp 3 Zeichen kannst du einfach ein Stringtrimright machen. ansonten muss das auch programmiert werden.
114757
Lösung 114757 29.07.2015, aktualisiert am 30.07.2015 um 12:57:33 Uhr
Goto Top
Moin,
keine große Sache mit Powershell
$in = 'D:\out'  
$out = 'D:\transfer'  

gci $in -Filter *.* | %{
    $dest = "$out\$($_.Name -replace '_\d+$','')"  
    while (Test-Path $dest){sleep -Seconds 40}
    move-item $_.Fullname -Destination $dest
}
Gruß jodel32
Pjordorf
Pjordorf 29.07.2015 um 15:53:27 Uhr
Goto Top
Hallo.

Zitat von @eazy-isi:
Hierbei muss überprüft werden ob die Datei im Zielverzeichnis bereits existiert, wenn ja soll 40sec gewartet werden und dann erneut versucht werden.
Wieso? Was ändert sich da innerhalb der 40 Sekunden ?

d:\out\r1.mmm1122.rtz.ghl
d:\out\r1.mmm1122.rtz.ghl_01
d:\out\r1.mmm1122.rtz.ghl_02
d:\out\r1.mmm1122.rtz.ghl_03
OK. Alle unterscheiden sich....

d:\out\r1.mmm1122.rtz.ghl ==> d:\transfer\r1.mmm1122.rtz.ghl
d:\out\r1.mmm1122.rtz.ghl_01 ==> d:\transfer\r1.mmm1122.rtz.ghl
d:\out\r1.mmm1122.rtz.ghl_02 ==> d:\transfer\r1.mmm1122.rtz.ghl
d:\out\r1.mmm1122.rtz.ghl_03 ==> d:\transfer\r1.mmm1122.rtz.ghl
Und wie oft soll jetzt die r1.mmm1122.rtz.ghl existieren? Wie bei deinem Beispiel 4 mal. Alles am gleichen Ort. Die OSe die ich kenne lassen so etwas nicht zu. da kein in einen Ordner immer nur ein Objekt mit einer Schreibweise existieren. Ergo wird dein umbenennen nach dem kopieren nix, oder du musst immer wieder die einzige Datei überschreiben. Wo sind dann deine vorher kopierten Dateien hin? Genau - Nicht mehr existent.....

Vielleicht hat jemand einen Tip für mich wie sowas zu realisieren ist.
Copy?
XCopy?
Robocopy?

Rename?

Move?

Egal wie, am ende hast du nur die zuletzt kopierte/verschobene Datei falls du fleißig überschreiben tust, oder halt nur die allererste.... aber niemals viele mit ein und den gleichen Buchstabenkombinationen.

Gruß,
Peter
schmitzi
schmitzi 29.07.2015 um 21:04:05 Uhr
Goto Top
...ich hab´ die Frage nicht verstanden face-smile
Pjordorf
Pjordorf 29.07.2015 um 22:06:25 Uhr
Goto Top
Hallo,

Zitat von @schmitzi:
...ich hab´ die Frage nicht verstanden face-smile
Wessen und welche.

Gruß,
Peter
schmitzi
schmitzi 30.07.2015 um 00:04:39 Uhr
Goto Top
ja, diese kryptischen Dateinamen die er da als Beispiel benutzt machen mich verrückt face-smile
eazy-isi
eazy-isi 30.07.2015 um 12:57:26 Uhr
Goto Top
Hallo zusammen,

für mich war die Frage relativ klar, aber sei´s drum der Tip von jodel32 hat mich auf den richtigen Weg geführt.

Ich löse das ganze jetzt wie folgt:

$Host.UI.RawUI.WindowTitle = "Rename-Move-Files"  
# Ordner der auf neue Dateien ueberwacht wird
$global:folderMonitor = 'C:\test\Out'  
# Ordner in den die unbenannten Files verschoben werden
$global:folderOUT = 'C:\test\Out\move'  
if ((Get-EventSubscriber "File_Watcher" -ErrorAction SilentlyContinue)){Unregister-Event "File_Watcher"}  
#Filewatcher erstellen
$watcher = New-Object System.IO.FileSystemWatcher $global:folderMonitor,'*.mmm1122.*' -Property @{IncludeSubDirectories=$false}  

# Filesystem-Watcher registrieren
Register-ObjectEvent $watcher "Created" -SourceIdentifier "File_Watcher" -Action {  

gci $folderMonitor -Filter *.mmm1122.* | %{
    $dest = "$global:folderOUT\$($_.Name -replace '_\d+$','')"  
    while (Test-Path $dest){sleep -Seconds 40}
    move-item $_.Fullname -Destination $dest
}
}
cls
write-host "Warte auf neue Files ..." -ForegroundColor Yellow  
while($true){sleep(1)}

@Pjordorf
Im "$global:folderOUT" werden die Datein alle 30sec von einer anderen Software verarbeitet und danach gelöscht. Deshalb soll falls das File in "$global:folderOUT"
noch existiert 40sec gewartet werden, und dann das File verschoben werden.

Herzlichen Dank nochmals an jodel32 für den Tip in die richtige Richtung.

Gruß
eazy_isi
Pjordorf
Pjordorf 30.07.2015 um 13:12:55 Uhr
Goto Top
Hallo,

Zitat von @eazy-isi:
Im "$global:folderOUT" werden die Datein alle 30sec von einer anderen Software verarbeitet und danach gelöscht.
OK. Das wurde nicht gesagt das es eben keine Überschreibungen geben wird da die alten Dateien vorher schon anderweitig gelöscht werden. Ich hatte angenommen das die Dateien behalten werden sollen (Nein - über Inhalt und zweck habe ich null Ahnung face-smile)

Gruß,
Peter
114757
114757 30.07.2015 aktualisiert um 13:29:07 Uhr
Goto Top
Zitat von @eazy-isi:
Ich löse das ganze jetzt wie folgt:
Da hat sich einer hier bedient face-big-smile
Dann hättest du auch gleich den durch das Event ausgelösten Dateinamen nehmen können ($Event.SourceEventArgs.FullPath) anstatt den Ordner erneut mit einer Schleife zu durchlaufen :-P

Gruß jodel32
schmitzi
schmitzi 30.07.2015 um 17:47:59 Uhr
Goto Top
Abschreiben ist auch eine Lösung face-smile
114757
114757 30.07.2015 aktualisiert um 18:28:42 Uhr
Goto Top
Abschreiben ist auch eine Lösung
Aber nur wenn man die Quelle nennt.