nuovo2
Goto Top

Mehrere Dateien in Ordner mit gleichem Namen kopieren

Ich habe in diesem Forum folgenden Code gefunden, der Wunderbar funktioniert. Dabei sind die Dateinamen bei der folgendermaßen aufgebaut: IDNummer_Name. Ich möchte dass der Ordnername nur aus IDNummer besteht "Unterstrich und Name" sollen ignoriert werden. Da ich selber nicht programmieren kann, wäre ich über jede Hilfe Dankbar.
#move-Files-custom.ps1
Param (
[String]$Source = "c:\shared",  
[String]$Destination = "c:\shared\shared_2" ,  
[String]$findstring = ' ' ,  
[String]$replaceString = ', '  
)

#get-all Files
#Powershell V3
[array]$myFiles = Get-ChildItem -Path $Source -File
#Powershell V2
#[array]$myFiles = Get-ChildItem -Path $Source | where { $_.PSisContainer -ne $true }
foreach ( $file in $myFiles ) {
    [string]$Basename = $file.Basename
    [string]$newFileName = $file.Name -replace($findstring,$replaceString)
#Check for Destinationpath, if not exist create new Directory
    if ( ( Test-Path "$Destination\$Basename" ) -ne $true )  
        { New-Item -Path $Destination\$Basename -type directory }
#Move File with new Filename, if not exist on destinaton
    if ( Test-Path $Destination\$Basename\$newFileName )
        { Write-Host "File $newFileName already exist, no further action" }  
    else
        {  Move-Item -Passthru $file.Fullname -Destination "$Destination\$Basename\$newFileName" }  
}

Content-ID: 600898

Url: https://administrator.de/forum/mehrere-dateien-in-ordner-mit-gleichem-namen-kopieren-600898.html

Ausgedruckt am: 23.04.2025 um 09:04 Uhr

145033
145033 01.09.2020 aktualisiert um 18:00:23 Uhr
Goto Top
Was sagt der Bauer wenn er in den Stall kommt?
Param (
    [String]$Source = "c:\shared",  
    [String]$Destination = "c:\shared\shared_2",  
    [String]$findstring = ' ',  
    [String]$replaceString = ', '  
)
[array]$myFiles = Get-ChildItem -Path $Source -File | ?{$_.BaseName -match '_'}  
foreach ($file in $myFiles) {
    [string]$newFileName = $file.Name -replace $findstring,$replaceString
    $newfolder = join-path $Destination $file.Basename.split("_")  
    $newPath = join-path $newfolder $newFileName
    if(!(Test-Path $newfolder)){md $newfolder -Force | out-null}
    if(!(Test-Path $newPath)){
        $file | move-item -Destination $newPath -PassThru -Verbose
    }
}
nuovo2
nuovo2 01.09.2020 um 19:03:32 Uhr
Goto Top
Hallo vielen Dank, das hat leider nicht ganz funktioniert. Vielleicht habe ich es nicht richtig erklärt.
Wenn der Ordner erstellt wird, soll der Name nur aus dem Teil bis zum "Unterstrich" bestehen. Dateiname IDNummer_Name Ordnername soll sein IDNummer.

Vielen Dank!

Grüße
145033
145033 01.09.2020 aktualisiert um 21:40:49 Uhr
Goto Top
Genau das geschilderte macht Zeile 10 bereits genau so wie du es möchtest. Es splittet den Dateinamen anhand des Underscores und nimmt den ersten Teil und erstellt damit den Ordner, und verschiebt das File anschließend in diesen, klappt hier einwandfrei.
erikro
erikro 02.09.2020 um 16:46:49 Uhr
Goto Top
Moin,

Zitat von @145033:

Genau das geschilderte macht Zeile 10 bereits genau so wie du es möchtest.

Das stimmt. Aber Zeile 13 ist m. E. falsch. Zeile 13 bis 15 wäre umgangssprachlich: Wenn der neue Pfad nicht existiert, dann kopiere die Datei in den neuen Pfad. face-wink

Liebe Grüße

Erik
145916
145916 02.09.2020 aktualisiert um 16:52:31 Uhr
Goto Top
Moin.
Zitat von @erikro:
Das stimmt. Aber Zeile 13 ist m. E. falsch. Zeile 13 bis 15 wäre umgangssprachlich: Wenn der neue Pfad nicht existiert, dann kopiere die Datei in den neuen Pfad. face-wink
Also für mich sieht das richtig aus $newPath ist ja kein Ordner sondern ein vollqualifizierter Pfad inkl. Dateiname und somit wird die Datei nur kopiert wenn eine Datei mit dem Namen nicht existiert. Also eine Kollision mit einer vorhandenen Datei verhindert werden soll.

Gruß eagle
erikro
erikro 02.09.2020 um 16:52:12 Uhr
Goto Top
Zitat von @145916:

Moin.
Zitat von @erikro:
Das stimmt. Aber Zeile 13 ist m. E. falsch. Zeile 13 bis 15 wäre umgangssprachlich: Wenn der neue Pfad nicht existiert, dann kopiere die Datei in den neuen Pfad. face-wink
Also für mich sieht das richtig aus $newPath ist ja kein Ordner sondern ein vollqualifizierter Pfad inkl. Dateiname und somit wird die Datei nur kopiert wenn eine Datei mit dem Namen nicht existiert. Also eine Kollision verhindert werden soll.


Stimmt. Hast recht. War ein harter Tag. face-wink
145916
145916 02.09.2020 aktualisiert um 16:53:53 Uhr
Goto Top
Zitat von @erikro:
Stimmt. Hast recht. War ein harter Tag. face-wink
Dann wirds Zeit für den Pool face-smile. Platsch .....
nuovo2
nuovo2 04.09.2020 um 10:29:48 Uhr
Goto Top
Ich danke vielmals.

Heute habe ich es nochmal probiert und es hat wunderbar funktioniert.

Vielen Vielen Dank und ein schönes Wochenende.