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

Ausgedruckt am: 19.03.2024 um 04:03 Uhr

Mitglied: 131381
131381 29.11.2016 aktualisiert um 13:01:58 Uhr
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ß
Mitglied: Endoro
Endoro 29.11.2016 aktualisiert um 16:35:09 Uhr
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
Mitglied: websolutions
websolutions 01.12.2016 aktualisiert um 14:39:26 Uhr
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?
Mitglied: websolutions
websolutions 01.12.2016 um 14:40:45 Uhr
Goto Top
@Endoro
Das ist ganz nett, allerdings sollen sich die (flachen) Dateinamen automatisch aus den Ordnern zusammensetzen.
Mitglied: 131381
131381 01.12.2016 aktualisiert um 14:48:38 Uhr
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
Mitglied: websolutions
websolutions 01.12.2016 um 14:54:33 Uhr
Goto Top
Version 2 läuft, das ändere ich gleich und teste.
Mitglied: websolutions
websolutions 01.12.2016 um 15:21:07 Uhr
Goto Top
Auch mit Version 4.0 leider nicht, siehe screenshot.

2016-12-01 15_19_15-administrator_ windows powershell ise
Mitglied: 131381
131381 01.12.2016 aktualisiert um 15:26:16 Uhr
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.
Mitglied: websolutions
websolutions 01.12.2016 um 15:39:01 Uhr
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
Mitglied: Endoro
Endoro 01.12.2016 um 15:47:16 Uhr
Goto Top
Hey,

was ist denn ein flacher Dateiname?

Gruss, Endoro
Mitglied: 131381
131381 01.12.2016 aktualisiert um 16:25:31 Uhr
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.
Mitglied: websolutions
websolutions 01.12.2016 um 16:25:34 Uhr
Goto Top
Den hab ich gesehen und mich bereits gewundert ;)
Jetzt läufts und ich kann testen. Tausend Dank!