turboburn
Goto Top

PS - Teil aus Dateinamen in neuen Ordnernamen erstellen

Hallo Zusammen,

Ich habe folgendes Problem:
In einem Quellverzeichnis liegen Dateien im PDF-Format und diese sollen an Hand einer Kundennummer in ein Zielverzeichnis kopiert werden.

Beispiel:

Dateiname:

D_04_3002_2018-11_100012_Kundenname_Ort.pdf
D_04_3015_2018-11_100057_Kundenname_Ort.pdf

1) Diese beiden Dateien (es werden noch mehr) in dem Quellverzeichnis C:\Users\Admin\Desktop\Quellverzeichnis,
sollen durch die Kundennummer im Dateinamen (immer 6-stellig; 100012, 100057,...) in ein Zielverzeichnis kopiert und wenn dieser nicht vorhanden ist, erstellt werden.

2) Danach sollen die vorhanden Dateien im Quellverzeichnis in ein anderes Zielverzeichnis verschoben werden, was aber bereits vorhanden ist.

zu 1) bleibe ich immer bei: Copy-Item -path .\*.pdf -Destination "C:\Users\Admin\Desktop\Zielverzeichnis\" -Recurse hängen. Wie definiere ich das er die 6-Stellige Kundennummer selektiert und sich danach richtet?

zu 2) Move-Item -path .\*.pdf -Destination "C:\Users\Admin\Desktop\Zielverzeichnis\" <<< ist am Ende das gleiche Problem. Das er mir die 04 im Dateiennamen selektiert und sich danach richtet?

Wie man sieht wird das Script im Quellverzeichnis ausgeführt.

Würde mich über eine Antwort freuen.
Vielen Dank.

Content-Key: 391789

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

Printed on: April 24, 2024 at 23:04 o'clock

Mitglied: 137443
137443 Nov 06, 2018 updated at 13:09:55 (UTC)
Goto Top
Du hättest auch einfach auf die Links unter deinem Thread klicken können dann hättest du es schon fast frei Haus bekommen . Aber die Suche benutzen ist ja auch eine Herauaforderung ...
$quelle = "."  
$ziel = "..\Zielverzeichnis"  
gci $quelle -Filter *.pdf -recurse | %{
    $dest = "$ziel\$($_.BaseName.split('_')[4])"  
    if(!(Test-Path $dest)){md $dest -Force | out-null}
    $_ | copy-item -Destination $dest -Force -Verbose
}
Gruß l.
Member: TurboBurn
TurboBurn Nov 06, 2018 at 13:17:35 (UTC)
Goto Top
Ah Danke, sehe das auch gerade.
War mein erster Thread und das aus Verzweifelung face-big-smile
Frage: In der 4.ten Zeile "($_.BaseName.split('_')[4])" steht die 4 für den vierten "_"?
Mitglied: 137443
137443 Nov 06, 2018 updated at 13:19:52 (UTC)
Goto Top
Split trennt einen String mit einem definierten Trennzeichen in ein Array auf dahinter kommt dann der 0-basierte Index für den gewünschten Arrayeintrag. Hätte man auch einfach selbst ausprobieren können face-confused
Member: TurboBurn
TurboBurn Nov 06, 2018 at 13:58:58 (UTC)
Goto Top
Alles schon erledigt, Danke!

Ja lieber vorher ausprobieren, dann Frage stellen face-plain
Mitglied: 137443
137443 Nov 06, 2018 updated at 14:23:08 (UTC)
Goto Top
Zitat von @TurboBurn:

Alles schon erledigt, Danke!
Na dann fehlt hier ja nur noch der Haken am Beitrag.
Ja lieber vorher ausprobieren, dann Frage stellen face-plain
Rischtisch face-smile
Member: TurboBurn
TurboBurn Nov 06, 2018 at 14:48:25 (UTC)
Goto Top
Eine Frage noch.

das skript zum verschieben sieht jetzt so aus.
$quelle = "C:\Users\Admin\Desktop\Quellverzeichnis"
$ziel = "C:\Users\Admin\Desktop\Zielverzeichnis"
gci $quelle -Filter *.pdf | %{
$dest = "$ziel\$($_.BaseName.split('_')[1])"
if(!(Test-Path $dest)){md $dest | out-null}
$_ | move-item -Destination $dest -Force -Verbose
}

Jetzt erstellt er mir einen Ordner im Zielverzeichnis mit 04 wie im Dateinamen: D_04_3015_2018-11_100057_Kundenname_Ort.pdf

Ist es möglich den Code so anzupassen, dass er den nicht den Ordner 04 anlegt, sondern die Datei D_04_3015_2018-11_100057_Kundenname_Ort.pdf in das bereits vorhandene Verzeichnis FG_04 verschiebt?
Genauso auch mit anderen Dateien D_05_3016_2018-11_100057_Kundenname_Ort.pdf in das vorhandene Verzeichnis FG_05, die D_06_3015_2018-11_100057_Kundenname_Ort.pdf in FG_06 usw. ...
Mitglied: 137443
137443 Nov 06, 2018 updated at 15:29:14 (UTC)
Goto Top
Klar einfach den Inhalt der Variablen $dest mit dem Prefix FG_ versehen:
$dest = "$ziel\FG_$($_.BaseName.split('_')[1])"   
Das ist nur eine komprimierte Schreibweise in einem String mit Subexpression $() , du könntest das ganze auch für dich vielleicht verständlicher so schreiben
$dest = $ziel + "\FG_" + $_.BaseName.split('_')[1]   
Ist ja beides eine einfach Concatenation von Strings und Variablen.
Member: TurboBurn
TurboBurn Nov 13, 2018 updated at 12:03:30 (UTC)
Goto Top
Eine Woche her...
...Ich habe es getestet face-wink und es funktioniert...

meine Frage noch die während dessen entstand...
Ist es möglich den Präfix zu erweitern? Momentan verschiebt er ja die Dateien in den jeweiligen "FG_"-Ordner an Hand der Datei D_06_3015_2018-11_100057_Kundenname_Ort.pdf also Datei mit 06 in FG_06, 04 in FG_04, usw....

Die Erweiterung des Präfix im Dateinamen würde sich auf die 1. Stelle im Dateinamen beziehen.

Beispiel: D_06_3015_2018-11_100057_Kundenname_Ort.pdf verschiebt in das Zielverzeichnis \\...\...\FG_06
nun soll er die Datei nicht nur in FG_06 verschieben, sondern an Hand der 1. Stelle im Dateinamen (D_06_3015_2018-11_100057_Kundenname_Ort.pdf oder W_06_3015_2018-11_100057_Kundenname_Ort.pdf ; es gibt nur D oder W)
in ein Unterverzeichnis verschoben werden.

Beispiel:
D_06_3015_2018-11_100057_Kundenname_Ort.pdf nach \\....\...\FG_06\Kal\DAkkS\signiert
D_04_3015_2018-11_100057_Kundenname_Ort.pdf nach \\....\...\FG_04\Kal\DAkkS\signiert

bzw.

W_06_3015_2018-11_100057_Kundenname_Ort.pdf nach \\....\...\FG_06\Kal\Werk\signiert
W_04_3015_2018-11_100057_Kundenname_Ort.pdf nach \\....\...\FG_04\Kal\Werk\signiert

Puh das klingt gerade ziemlich kompliziert... Ich hoffe du kannst mir helfen.

Oder sollte ich das Script so anpassen, dass es für jede Variante D_06; D_04; bzw. W_06; W_04 usw... die entsprechenden Codezeilen (mit Zielverzeichnis) gibt?
Member: TurboBurn
TurboBurn Nov 20, 2018 updated at 12:14:13 (UTC)
Goto Top
Leider bekomme ich es immernoch nicht hin, dass die PDF-Dateien ins jeweilige Verzeichnis verschoben wird, wenn...

Beispiel:
D_06_3015_2018-11_100057_Kundenname_Ort.pdf nach \\....\...\FG_06\Kal\DAkkS\signiert
(06 - Verzeichnis \\...\FG_06 | D - Verzeichnis \\...\DAkkS\signiert)
D_04_3015_2018-11_100057_Kundenname_Ort.pdf nach \\....\...\FG_04\Kal\DAkkS\signiert
(04 - Verzeichnis \\...\FG_04 | D - Verzeichnis \\...\DAkkS\signiert)
bzw.

W_06_3015_2018-11_100057_Kundenname_Ort.pdf nach \\....\...\FG_06\Kal\Werk\signiert
(06 - Verzeichnis \\...\FG_06 | W - Verzeichnis \\...\Werk\signiert)
W_04_3015_2018-11_100057_Kundenname_Ort.pdf nach \\....\...\FG_04\Kal\Werk\signiert
(04 - Verzeichnis \\...\FG_04 | W - Verzeichnis \\...\Werk\signiert)
Mitglied: 137846
137846 Nov 20, 2018 updated at 12:25:37 (UTC)
Goto Top
Moin.
Du hast aber schon gesehen das sich der User @137443 abgemeldet hat?!

Persönlich angepasste Skripte bekommst du von mir schnell und unkompliziert gerne über PN.

Gruß A.
Member: TurboBurn
TurboBurn Nov 20, 2018 at 12:41:24 (UTC)
Goto Top
Neee leider nicht.
Schade dieser User konnte mir wenigstens (auch ohne Obolus) weiterhelfen.
Mitglied: 137846
137846 Nov 20, 2018 updated at 12:48:41 (UTC)
Goto Top
Zitat von @TurboBurn:

Neee leider nicht.
Schade dieser User konnte mir wenigstens (auch ohne Obolus) weiterhelfen.
Du hast es wohl offensichtlich (wie man sieht) übertrieben. Hat ja offensichtlich auch rein gar nichts mehr mit der ursprünglichen Frage zu tun.
Naja wer nicht will hat schon. Kannst ja von mir aus noch 1 Jahr damit vertrödeln face-big-smile, oder sich hinsetzen und eben Powershell selbst lernen. Geiz ist Geil scheint ja in Mode ...
Member: TurboBurn
TurboBurn Nov 20, 2018 at 13:29:42 (UTC)
Goto Top
Vielen Dank! face-wink Manchmal sollte man doch für Leistung zahlen... ist ja Richtig... face-smile
Member: TurboBurn
TurboBurn Jan 22, 2019 updated at 14:52:59 (UTC)
Goto Top
Hallo,

bräuchte mal Hilfe zu diesem Teil des hieraus entstandenen Scripts.
Hat jmd hierzu eine Lösung ?!?


  1. kopiert signierte Kalibrierscheine durch die Kundennummer, in das Kundenverzeichnis #

$quelle = "\\Quellverzeichnis\"
$ziel = "\\Zielverzeichnis\"
gci $quelle -Filter *.pdf -recurse | %{
$dest = "$ziel\$($_.BaseName.split('_')[4])"
if(!(Test-Path $dest)){md $dest | out-null}
$_ | copy-item -Destination $dest -Force -Verbose
}


# kopiert signierte Kalibrierscheine durch die Kundennummer, in das Kundenverzeichnis #
geht es mir darum das an Hand der Syntax (Bsp.: W_06_3015_2018-11_100057_Kundenname_Ort.pdf) der Datei, nicht nur der Ordner (100057) angelegt wird, sondern durch im Zielverzeichnis auch der Unterordner 2018 (Jahr) (Bsp.: \\Zielverzeichnis\100057\2018\)
Sollte sich die Syntax im Dateinamen ändern 2019-01 ( W_06_3015_2019-01_100057_Kundenname_Ort.pdf), dann \\Zielverzeichnis\100057\2019\
usw.


Viele Grüße und danke vorab!
Member: TurboBurn
TurboBurn Jan 24, 2019 at 08:50:24 (UTC)
Goto Top
Ich habe jetzt mehrere Versuche ausprobiert.

Einen zusätzlichen Kopiervorgang innerhalb des erstellten Ordners, leider stoße ich dabei auch an meine Grenzen... face-sad
Ich habe es zusätzlich noch mit einer Kombination aus New-Item und Subfoldern versucht, auch ohne Erfolg face-sad
Keiner ne Lösung parat? Im Netz gibt es irgendwie auch nix richtiges...
Member: colinardo
Solution colinardo Jan 24, 2019 updated at 09:23:33 (UTC)
Goto Top
Servus.
Du hast Glück das hier jemand den Post sieht. Die User oben scheinen sich ja alle verdrückt zu haben.
W_06_3015_2019-01_100057_Kundenname_Ort.pdf), dann \\Zielverzeichnis\100057\2019\
usw.
$quelle = "\\Quellverzeichnis"  
$ziel = "\\Zielverzeichnis"  
gci $quelle -Filter *.pdf -recurse | %{
    $dest = "$ziel\$($_.BaseName.split('_')[4])\$($_.Basename.split('_')[3].Split('-'))"  
    if(!(Test-Path $dest)){md $dest -Force | out-null}
    $_ | copy-item -Destination $dest -Force -Verbose
}
Grüße Uwe

Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
Member: TurboBurn
TurboBurn Jan 24, 2019 at 09:48:37 (UTC)
Goto Top
Vielen Dank.

Funktioniert einwandfrei!
Ja, leider kam ich immer ein paar Tage zu spät, nachdem die sich abgemeldet haben.
Nochmal vielen Dank.
Member: colinardo
colinardo Jan 24, 2019 updated at 09:50:59 (UTC)
Goto Top
You're welcome.