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" }
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
8 Kommentare
Neuester Kommentar

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
}
}

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.

Moin.
Gruß eagle
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.
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.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.
Gruß eagle
Zitat von @145916:
Moin.
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.
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.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.
Stimmt. Hast recht. War ein harter Tag.

Dann wirds Zeit für den Pool
. Platsch .....