rg8rg8
Goto Top

Ordnerstruktur: Dateien in Unterordner verschieben

Moin zusammen,

schon mal Danke vorab für die Möglichkeit, hier Hilfe zu erhalten.

Ich habe in einem Ordner 300 Excel Dateien mit folgender Struktur:
1900007_SD_BW_DFMG_Doku-Tool_v3.3
1910166_SD_BW_DFMG_Doku-Tool_v3.3
etc

Jede einzelne soll in einen einzelnen Unterordner verschoben werden. Name für den Unterordner soll die 7 stellige Zahl am Anfang sein.

Ich habe bereits die Lösung von bastla probiert. Es hat nicht funktioniert face-sad
Musterlösungen: Dateien verschieben abhängig vom Teil des Dateinamens

Kann mir jemand erklären, wie ich vorgehen muss?
Besten Dank

Content-Key: 6841358310

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

Printed on: May 9, 2024 at 09:05 o'clock

Mitglied: 3063370895
3063370895 Apr 19, 2023 updated at 17:53:23 (UTC)
Goto Top
Moin

$folder = 'C:\tmp'  
Get-ChildItem -Path $folder -File | Foreach-Object {
    $targetFolder = Join-Path -Path $folder -ChildPath $_.Name.Substring(0,7)
    if(!(Test-Path $targetFolder)){
        New-Item -ItemType Directory $targetFolder
    }
    Move-Item -Path $_.FullName -Destination $targetFolder
}

-Thomas
Member: Crusher79
Crusher79 Apr 19, 2023 updated at 18:04:49 (UTC)
Goto Top
$Dateien = "C:\temp\excel\"  
gci $Dateien | % { 
     New-Item -ItemType directory $($_.BaseName.Split("_"))[0];  
     Move-Item $_.FullName $Dateien"$($_.BaseName.Split("_")[0])\";  
}

Kurzttest war ok gerade.
Mitglied: 3063370895
3063370895 Apr 19, 2023 updated at 18:09:57 (UTC)
Goto Top
Zitat von @Crusher79:

$Dateien = "C:\temp\excel\"  
gci $Dateien | % { 
     New-Item -ItemType directory $($_.BaseName.Split("_"))[0];  
     Move-Item $_.FullName $Dateien"$($_.BaseName.Split("_")[0])\";  
}

Kurzttest war ok gerade.
$Dateien = "C:\temp\excel\"  
Get-ChildItem $Dateien | Foreach-Object { 
     New-Item -ItemType directory $($_.BaseName.Split("_"))[0]  
     Move-Item $_.FullName $Dateien"$($_.BaseName.Split("_")[0])\"  
}

Aliase haben in Skripten nichts zu suchen face-smile
und ohne Test-Path gibts ne rote wall of death, wenn das Skript öfters ausgeführt werden soll.
(alternativ New-Item mit -ErrorAction SilentlyContinue, ist aber nicht so sauber)
Ich empfehle noch Join-Path, dann ist es egal ob
$Dateien = "C:\temp\excel\"  
oder
$Dateien = "C:\temp\excel"  
Member: Crusher79
Crusher79 Apr 19, 2023 at 18:11:03 (UTC)
Goto Top
Zitat von @3063370895:

Aliase haben in Skripten nichts zu suchen face-smile

War mal schreibfaul. Vor ein paar Wochen hatten wir eine Crack der nur so gecodet hat. Hat sich aber dann selbst weg gecodet - gelöschter User face-big-smile

Da wollte ich einmal schneller sein face-big-smile
Mitglied: 3063370895
3063370895 Apr 19, 2023 at 18:11:48 (UTC)
Goto Top
Du meinst bestimmt Wurstel - oder den Nick den er danach hatte ;)
Member: Crusher79
Crusher79 Apr 19, 2023 at 18:13:04 (UTC)
Goto Top
Zitat von @3063370895:

Du meinst bestimmt Wurstel - oder den Nick den er danach hatte ;)

Möglich. War im coden recht gut. Aber zwischenmenschlich eher schwierig....

Naja: Frage ... 5 Sekunden später komplettes Script...

So der Typ.
Member: rg8rg8
Solution rg8rg8 Apr 21, 2023 at 11:03:48 (UTC)
Goto Top
Ich hatte nun Zeit, eure Lösungen auszuprobieren. Ich denke mal, Ihr habt mir zu viel zugetraut. Funktioniert hat es nicht. Die Lösung habe ich woanders gefunden. Sie sieht so aus:

rem Anfang

@echo off

setlocal

rem srcdir ist das Quellverzeichnis, Bitte anpassen
set "srcdir=C:\test"
rem destdir ist das Zielverzeichnis, Bitte anpassen
set "destdir=C:\doku"


for /f "tokens=1,*" %%i in ('dir "%srcdir%" /b /-p /a:-d /o:gne') do (
if not exist "%destdir%\%%i" md "%destdir%\%%i"
move "%srcdir%\%%i %%j" "%destdir%\%%i"


echo "%destdir%\%%i\%%j"
echo.
)

endlocal

rem Ende
Mitglied: 3063370895
3063370895 Apr 21, 2023 at 11:13:24 (UTC)
Goto Top
Ich hatte nun Zeit, eure Lösungen auszuprobieren. Ich denke mal, Ihr habt mir zu viel zugetraut. Funktioniert hat es nicht. Die Lösung habe ich woanders gefunden. Sie sieht so aus:

Das macht aber nicht das, was du eigentlich gefordert hast. Die Unterordner werden nicht nur die 7-stellige Zahl haben sondern den ganzen Dateinamen.

Die Powershell-Skripte von oben kannst du als .ps1 abspeichern und dann mit rechtsklick -> "Mit Powershell ausführen" starten.
Member: rg8rg8
rg8rg8 Apr 21, 2023 at 11:31:48 (UTC)
Goto Top
Danke für den Tipp. Ich bin von Batch ausgegangen. Wenn ich deine Lösung ausführe, werden Ordner erstellt (mit den 7 Zahlen als Namen), jedoch wird die Datei nicht hinein kopiert, die Datei verbleibt im Überordner und wird nicht mehr als xlsm erkannt (nur Datei)
Mitglied: 3063370895
3063370895 Apr 21, 2023 at 11:37:54 (UTC)
Goto Top
Bei mir klappt das ...
https://i.imgur.com/75yufkz.gif

jedoch wird die Datei nicht hinein kopiert,

soll kopiert

Jede einzelne soll in einen einzelnen Unterordner verschoben werden.

oder verschoben werden?
Member: Crusher79
Crusher79 Apr 21, 2023 updated at 12:46:03 (UTC)
Goto Top
Wundert mich

@3063370895 hat auch nur mti $_.Fullname gearbeitet. Wenn des nur "Datei" ist, wird die Endung abgeschnitten. PUNKT und nichts weiter.

Fullname ist Pfad + Datei -Name + Endung
Basename ist Datei-Name

Hast du irgendwo selber FullName in Basename geändert? Finde so auch bei @3063370895 keinen Fehler. Fullname und Basename würden da was ausmachen.

PS: Windows 10 oder Windows 7? Einige hängen ja noch an der 7. PowerShell verhielt sich früher ggf. bei einigen Operationen leicht anders.....