websolutions
Goto Top

Script zum Auflösen einer Ordnerstruktur und zurück gesucht

Hallo miteinander.
Ich bin auf der Suche nach einem Script, welches alle Dateien einer Ordnerstruktur in einen "Arbeitsordner" kopiert/verschiebt und nach einem externen Arbeitsschritt wieder zurück kopiert/verschiebt.
Mal als Beispiel:
1. Aus "d:\Aufträge\A_Beispiele\Unterbeispiele\eintest.a" wird "d:\Arbeitsordner\A_Beispi$Unterbe$eintest.a"
2. eine exe von uns verändert "A_Beispi$Unterbe$eintest.a"
3. "A_Beispi$Unterbe$eintest.a" wir zurück kopiert/verschoben nach "d:\Aufträge\A_Beispiele\Unterbeispiele\eintest.a"

Hat jemand von Euch eine Idee, wie ich das bewerkstelligen könnte?

Besten Dank vorab!

Content-Key: 322363

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

Printed on: April 22, 2024 at 15:04 o'clock

Mitglied: 131381
131381 Nov 29, 2016 updated at 12:01:58 (UTC)
Goto Top
Powershell z.B.

Copy flat
$source = 'd:\Aufträge'  
$work = 'D:\Arbeitsordner'  
# copy flat from source to work
gci $source -Recurse | ?{!$_.PSIsContainer} |  copy-item -Destination {"$work\$($_.Fullname.Substring($source.length).replace('\','#'))"} -Force  
und dann zurück mit

Copy back
$source = 'd:\Aufträge'  
$work = 'D:\Arbeitsordner'  
# copy back to folder structure
gci $work | ?{!$_.PSIsContainer} | copy-item -Destination {"$source\$($_.Name.replace('#','\'))"} -Force  
Gruß
Member: Endoro
Endoro Nov 29, 2016 updated at 15:35:09 (UTC)
Goto Top
Hey,
wenn ich dich richtig verstanden habe (Batch):

@echo off
xcopy "d:\Aufträge\A_Beispiele\Unterbeispiele\eintest.a" "d:\Arbeitsordner\A_Beispi$Unterbe$eintest.a" /e /h /q /k /o /i || exit /b  
rd /s /q "d:\Aufträge\A_Beispiele\Unterbeispiele\eintest.a"   
echo Echse mach was!
xcopy "d:\Arbeitsordner\A_Beispi$Unterbe$eintest.a" "d:\Aufträge\A_Beispiele\Unterbeispiele\eintest.a" /e /h /q /k /o /i || exit /b  
rd /s /q "d:\Arbeitsordner\A_Beispi$Unterbe$eintest.a"  

Ich hab's getestet, aber teste selbst. Wenn es beim Kopieren einen Fehler gibt, stoppt das Script. Siehe auch xcopy.
Zeile 4 musst du mit deinem externen Befehl ersetzen.

Gruß, Endoro
Member: websolutions
websolutions Dec 01, 2016 updated at 13:39:26 (UTC)
Goto Top
@131381
Vielen Dank schon mal, das sieht sehr vielversprechend aus!
Ich muss zugeben, dass ich absoluter Anfänger in Sachen Powershell bin.
wenn ich dieses Skript Windows PowerShell ISE laufen lasse, dann erhalte ich den Fehler: "Copy-Item : Das angegebene Pfadformat wird nicht unterstützt." am Zeichen 57 der Zeile 4. Scheint der Parameter "destination" zu sein?
Member: websolutions
websolutions Dec 01, 2016 at 13:40:45 (UTC)
Goto Top
@Endoro
Das ist ganz nett, allerdings sollen sich die (flachen) Dateinamen automatisch aus den Ordnern zusammensetzen.
Mitglied: 131381
131381 Dec 01, 2016 updated at 13:48:38 (UTC)
Goto Top
Zitat von @websolutions:

@131381
Vielen Dank schon mal, das sieht sehr vielversprechend aus!
Ich muss zugeben, dass ich absoluter Anfänger in Sachen Powershell bin.
wenn ich dieses Skript Windows PowerShell ISE laufen lasse, dann erhalte ich den Fehler: "Copy-Item : Das angegebene Pfadformat wird nicht unterstützt." am Zeichen 57 der Zeile 4. Scheint der Parameter "destination" zu sein?
Läuft hier problemlos... vermutlich ist deine Powershell nicht aktuell,sollte mindestens PS3.0 sein
https://www.google.de/search?q=Windows+Management+Framework
Member: websolutions
websolutions Dec 01, 2016 at 13:54:33 (UTC)
Goto Top
Version 2 läuft, das ändere ich gleich und teste.
Member: websolutions
websolutions Dec 01, 2016 at 14:21:07 (UTC)
Goto Top
Auch mit Version 4.0 leider nicht, siehe screenshot.

2016-12-01 15_19_15-administrator_ windows powershell ise
Mitglied: 131381
131381 Dec 01, 2016 updated at 14:26:16 (UTC)
Goto Top
Hier lüppt das sorry ...
Da wird eine deiner Dateien im Dateinamen eventuell irgendwelche Sonderzeichen haben.

Können wir hier ja nicht sehen was du da für Pfad und Dateinamen hast ...

Schreib mal:
$source = 'd:\Aufträge'  
$work = 'D:\Arbeitsordner'  
gci $source -Recurse | ?{!$_.PSIsContainer} | %{"$work\$($_.Fullname.replace($source,'').Substring(1).replace('\','#'))"}  
Damit sollten die Ziel Pfade nur angezeigt werden. Dann solltest du den Fehler finden.
Member: websolutions
websolutions Dec 01, 2016 at 14:39:01 (UTC)
Goto Top
Ich hab das jetzt auf einen Unterordner runtergebochen und kann kein Sonderzeichen erkennen:

2016-12-01 15_19_15-administrator_ windows powershell ise
Member: Endoro
Endoro Dec 01, 2016 at 14:47:16 (UTC)
Goto Top
Hey,

was ist denn ein flacher Dateiname?

Gruss, Endoro
Mitglied: 131381
131381 Dec 01, 2016 updated at 15:25:31 (UTC)
Goto Top
Ahh bei dir schlägt die Groß und Kleinschreibung von replace zu. Siehst du den Doppelpunkt nicht face-smile. Doppelpunkte sind nun mal illegale Zeichen im Pfad, außer im Laufwerksbuchstaben.

Habs oben mal angepasst.
Member: websolutions
websolutions Dec 01, 2016 at 15:25:34 (UTC)
Goto Top
Den hab ich gesehen und mich bereits gewundert ;)
Jetzt läufts und ich kann testen. Tausend Dank!