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-Key: 278698

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

Printed on: February 29, 2024 at 14:02 o'clock

Member: ChrisDynamite
ChrisDynamite Jul 29, 2015 at 13:20:32 (UTC)
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
Member: ChrisDynamite
ChrisDynamite Jul 29, 2015 at 13:22:10 (UTC)
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.
Mitglied: 114757
Solution 114757 Jul 29, 2015, updated at Jul 30, 2015 at 10:57:33 (UTC)
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
Member: Pjordorf
Pjordorf Jul 29, 2015 at 13:53:27 (UTC)
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
Member: schmitzi
schmitzi Jul 29, 2015 at 19:04:05 (UTC)
Goto Top
...ich hab´ die Frage nicht verstanden face-smile
Member: Pjordorf
Pjordorf Jul 29, 2015 at 20:06:25 (UTC)
Goto Top
Hallo,

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

Gruß,
Peter
Member: schmitzi
schmitzi Jul 29, 2015 at 22:04:39 (UTC)
Goto Top
ja, diese kryptischen Dateinamen die er da als Beispiel benutzt machen mich verrückt face-smile
Member: eazy-isi
eazy-isi Jul 30, 2015 at 10:57:26 (UTC)
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
Member: Pjordorf
Pjordorf Jul 30, 2015 at 11:12:55 (UTC)
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
Mitglied: 114757
114757 Jul 30, 2015 updated at 11:29:07 (UTC)
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
Member: schmitzi
schmitzi Jul 30, 2015 at 15:47:59 (UTC)
Goto Top
Abschreiben ist auch eine Lösung face-smile
Mitglied: 114757
114757 Jul 30, 2015 updated at 16:28:42 (UTC)
Goto Top
Abschreiben ist auch eine Lösung
Aber nur wenn man die Quelle nennt.