Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
05.05.25, 14:15
|
#1
|
Anfänger
Registriert seit: Mar 2011
Beiträge: 12
Bedankt: 0
|
Verzeichnis-/Unterverzeichnis-Generator die Zweite
Schafft es jemand, die bei mir ca.wöchentl., händische Zusammenräumaktion mittels einem BatchS***** zu vereinfachen ?  
In einem Hauptordner fallen jeden Tag versch.Unterordner mit Dateien etc. an.
Wunsch: Batch/Programm sollte alle Ordner (samt Inhalt) entspr. des Entstehungsdatums in einem gemeinsamen Ordner verschieben dh.
alle Ordner, die z.B. am 19.04.2025 entstanden sind werden in den neuen Ordner "19.04.2025" verschoben etc..
Beim Verschieben sollte/muß aber das ersprechende Entstehungsdatum erhalten bleiben.
Bitte, kann mir ein Profi da behilflich sein & schafft jemand das ?
ET23 
Geändert von ET23 (05.05.25 um 14:17 Uhr)
Grund: Frage/Grund blöderwise vergessen
|
|
|
05.05.25, 19:06
|
#2
|
abcdefgh
Registriert seit: Oct 2008
Ort: Ziegengehege
Beiträge: 2.650
Bedankt: 2.533
|
Das kriegt heutzutage jeder mit KI hin.
Zitat:
Ich möchte ein PowerShell-Skript.
In einem Hauptordner fallen jeden Tag versch.Unterordner mit Dateien etc. an.
Das Skript ollte alle Ordner (samt Inhalt) entsprechend des Entstehungsdatums in einem gemeinsamen Ordner verschieben. Das heißt alle Ordner, die z.B. am 19.04.2025 entstanden sind werden in den neuen Ordner "19.04.2025" verschoben etc..
Beim Verschieben muss das Entstehungsdatum erhalten bleiben.
|
Ergebnis:
Zitat:
# Pfad zum Hauptordner festlegen
$hauptordner = "C:\Pfad\zum\Hauptordner"
# Alle Unterordner im Hauptordner abrufen
$unterordner = Get-ChildItem -Path $hauptordner -Directory
# Jedes Unterverzeichnis verarbeiten
foreach ($ordner in $unterordner) {
# Entstehungsdatum des Ordners abrufen
$erstellungsdatum = $ordner.CreationTime
# Datumsformat wie gewünscht (TT.MM.YYYY)
$datumFormat = $erstellungsdatum.ToString("dd.MM.yyyy")
# Zielordnername erstellen
$zielordner = Join-Path -Path $hauptordner -ChildPath $datumFormat
# Prüfen, ob der Zielordner bereits existiert, wenn nicht, erstellen
if (-not (Test-Path -Path $zielordner)) {
New-Item -ItemType Directory -Path $zielordner -Force | Out-Null
}
# Ordner in den Zielordner verschieben
$zielPfad = Join-Path -Path $zielordner -ChildPath $ordner.Name
Move-Item -Path $ordner.FullName -Destination $zielPfad -Force
# Optionale Ausgabe
Write-Host "Ordner '$($ordner.Name)' wurde nach '$datumFormat' verschoben."
}
Write-Host "Operation abgeschlossen!"
|
Testen musst du es selber. Wenn es Fehler gibt, frag die Konserve.
|
|
|
Folgendes Mitglied bedankte sich bei Mr_Braun:
|
|
10.05.25, 07:48
|
#3
|
Anfänger
Registriert seit: Mar 2011
Beiträge: 12
Bedankt: 0
|
hast´n Nachricht....
|
|
|
20.05.25, 17:04
|
#4
|
Profi
Registriert seit: Apr 2021
Beiträge: 1.857
Bedankt: 2.271
|
So wird das Skript Probleme machen, wenn bereits Ordner mit Datum vorhanden sind.
Entweder:
a) Prüfen ob Ordner bereits ein Datum enthält. Wenn ja, dann nicht verschieben.
oder
b) Haupt- und Zielordner müssen unterschiedlich sein
PS: Als Datumsformat empfiehlt sich wegen der Sortierung meist: yyyy-MM-dd
Die Batch Datei inklusive Ignorieren bereits vorhandener Datumsordner könnte so aussehen:
Code:
@echo off
setlocal enabledelayedexpansion
REM Hauptordner ist D:\Downloads
set "HAUPTORDNER=D:\Downloads"
echo Sortiere Unterordner nach Erstellungsdatum...
echo.
REM Schleife durch alle Unterordner im Hauptordner
for /d %%D in ("%HAUPTORDNER%\*") do (
REM Überprüfe, ob es sich nicht um einen Datumsordner handelt (Format YYYY-MM-DD)
echo "%%~nxD" | findstr /r "^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$" > nul
if errorlevel 1 (
REM Ermittle das Erstellungsdatum des Ordners
for /f "tokens=1-5 delims=.: " %%a in ('dir /tc "%%D" ^| findstr /r /c:"^[0-9]"') do (
if "%%e"=="%%D" (
set "DAY=%%a"
set "MONTH=%%b"
set "YEAR=%%c"
REM Formatiere Tag und Monat mit führender Null falls nötig
if !DAY! LSS 10 set "DAY=0!DAY!"
if !MONTH! LSS 10 set "MONTH=0!MONTH!"
REM Erstelle den Datumsordner (YYYY-MM-DD)
set "DATUMSORDNER=!YEAR!-!MONTH!-!DAY!"
REM Erstelle den Datumsordner, falls er nicht existiert
if not exist "%HAUPTORDNER%\!DATUMSORDNER!" (
mkdir "%HAUPTORDNER%\!DATUMSORDNER!"
echo Datumsordner !DATUMSORDNER! erstellt.
)
REM Verschiebe den Unterordner in den entsprechenden Datumsordner
echo Verschiebe "%%~nxD" nach "!DATUMSORDNER!"...
REM Verwende ROBOCOPY, um das Erstellungsdatum zu erhalten und dann das Original zu löschen
robocopy "%%D" "%HAUPTORDNER%\!DATUMSORDNER!\%%~nxD" /E /DCOPY:T /COPY:DT /MOVE
REM Entferne leere Quellordner, falls ROBOCOPY sie nicht entfernt hat
if exist "%%D" rd /s /q "%%D" 2>nul
)
)
)
)
echo.
echo Fertig! Alle Unterordner wurden nach Erstellungsdatum sortiert.
pause
|
|
|
23.05.25, 08:56
|
#5
|
Anfänger
Registriert seit: Mar 2011
Beiträge: 12
Bedankt: 0
|
|
|
|
Gestern, 09:03
|
#6
|
Agnostiker
Registriert seit: Dec 2009
Beiträge: 4.427
Bedankt: 4.840
|
Ich habe von der Syntax von Batch-Dateien jetzt wenig Ahnung, aber aus der Erfahrung von anderen "Sprachen" scheinen mir die Anführungszeichen in den "set" Befehlen zweifelhaft. Z.B.
set "HAUPTORDNER=D:\Downloads"
zu
set HAUPTORDNER="D:\Downloads"
__________________
Der Klügere gibt nach... deshalb regieren die Dummen die Welt
Geändert von eitch100 (Gestern um 09:16 Uhr)
|
|
|
Gestern, 13:17
|
#7
|
Profi
Registriert seit: Apr 2021
Beiträge: 1.857
Bedankt: 2.271
|
Zitat:
Zitat von eitch100
scheinen mir die Anführungszeichen in den "set" Befehlen zweifelhaft
|
Das ist korrekt so. Kannst du in ner Eingabeaufforderung testen. mit "set" werden die Werte ordnungsgemäß abgezeigt.
Das garnichts angezeigt wird ist unwahrscheinlich. Irgendwas sollte ausgegeben werden. (Sind ja Echo-Zeilen drin)
Die Batch-Datei kann man von überall aus starten, da ja der Pfad angegeben wird.
|
|
|
Gestern, 14:51
|
#8
|
Agnostiker
Registriert seit: Dec 2009
Beiträge: 4.427
Bedankt: 4.840
|
Zitat:
Zitat von Klappstulle_mit_Käse
Das ist korrekt so. Kannst du in ner Eingabeaufforderung testen. mit "set" werden die Werte ordnungsgemäß abgezeigt.
|
Oh, ja, ich habe im anderen Srìpt geschaut und da war es auch schon so. Das hätte mir auch früher einfallen können. Letztlich ein klassischer Fall von: Einfach mal meine Klappe halten, wenn ich keine Ahnung habe...
Zum Problem: Das wird an den Ordnernamen liegen...
@ET23
Wie GENAU heißen denn deine Ordner, wenn sie erstellt wurden? Sie können ja nicht denselben Namen haben, wenn mehrere am Tag entstehen, wie du im Startpost schreibst. Oder möchtest du sie anhand des "Erstellungsdatums" (Also Ordneransicht - Details - Datum bzw. Rechtsklick auf Ordner - Eigenschaften - Erstellt) verschieben? Ob und wie das geht, geht direkt an Klappstulle.
Und kommt von der Batch wirklich gar nichts? Wie Klappstulle schon sagte, sollten die "echos" wenigstens angezeigt werden...
__________________
Der Klügere gibt nach... deshalb regieren die Dummen die Welt
Geändert von eitch100 (Gestern um 15:06 Uhr)
|
|
|
Heute, 08:06
|
#9
|
Anfänger
Registriert seit: Mar 2011
Beiträge: 12
Bedankt: 0
|
Guten Morgen,
nach Start der bat erscheint bei mir
1.)"Sortiere Unterordner nach......." und
2.) "Fertig Alle Unterordner........"
aber im Hauptordner, wo sich ja die aufzuteilenden Dateien befinden passiert nichts ?
Ich bräuchte/hätte gerne, daß alle im Hauptordner angefallenen Dateien od. auch manchmal Verzeichnisse nach ihrem Entstehungs-/Erschaffungs-Datum in dem jew.Unterorden mit dem Namen des Datums) einsortiert/verschoben werden.
Wenn das passiert ist, verschiebe ich dann die "Datumsordner" woanders hin und der Hauptorden bleibt wieder frei für neue Dateien bzw.Verzeichnisse.
Schönes Wochenende Euch allen & vielen, vielen Dank für Eure Unterstützung!!  
Leider fehlt mir auf dem Gebiet noch einiges... 
ET23
|
|
|
Heute, 09:39
|
#10
|
Agnostiker
Registriert seit: Dec 2009
Beiträge: 4.427
Bedankt: 4.840
|
Ja, der Code scheint da nicht zu funktionieren. Habe es auch gestestet... Außderdem scheint er nur die Ordner und nicht auch die Dateien zu prüfen.
__________________
Der Klügere gibt nach... deshalb regieren die Dummen die Welt
Geändert von eitch100 (Heute um 09:50 Uhr)
|
|
|
Heute, 11:27
|
#11
|
Profi
Registriert seit: Apr 2021
Beiträge: 1.857
Bedankt: 2.271
|
Zitat:
Zitat von ET23
sollte alle Ordner (samt Inhalt) entspr. des Entstehungsdatums in einem gemeinsamen Ordner verschieben
|
Von Dateien war nicht die Rede
Code:
@echo off
setlocal enabledelayedexpansion
REM Hauptordner ist D:\Downloads
set "HAUPTORDNER=D:\Downloads"
echo Sortiere Unterordner und Dateien nach Erstellungsdatum...
echo.
REM ========== TEIL 1: Unterordner sortieren ==========
echo === Verarbeite Unterordner ===
for /d %%D in ("%HAUPTORDNER%\*") do (
REM Überprüfe, ob es sich nicht um einen Datumsordner handelt (Format YYYY-MM-DD)
echo "%%~nxD" | findstr /r "^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$" > nul
if errorlevel 1 (
REM Ermittle das Erstellungsdatum des Ordners
for /f "tokens=1-5 delims=.: " %%a in ('dir /tc "%%D" ^| findstr /r /c:"^[0-9]"') do (
if "%%e"=="%%D" (
set "DAY=%%a"
set "MONTH=%%b"
set "YEAR=%%c"
REM Formatiere Tag und Monat mit führender Null falls nötig
if !DAY! LSS 10 set "DAY=0!DAY!"
if !MONTH! LSS 10 set "MONTH=0!MONTH!"
REM Erstelle den Datumsordner (YYYY-MM-DD)
set "DATUMSORDNER=!YEAR!-!MONTH!-!DAY!"
REM Erstelle den Datumsordner, falls er nicht existiert
if not exist "%HAUPTORDNER%\!DATUMSORDNER!" (
mkdir "%HAUPTORDNER%\!DATUMSORDNER!"
echo Datumsordner !DATUMSORDNER! erstellt.
)
REM Verschiebe den Unterordner in den entsprechenden Datumsordner
echo Verschiebe Ordner "%%~nxD" nach "!DATUMSORDNER!"...
REM Verwende ROBOCOPY, um das Erstellungsdatum zu erhalten und dann das Original zu löschen
robocopy "%%D" "%HAUPTORDNER%\!DATUMSORDNER!\%%~nxD" /E /DCOPY:T /COPY:DT /MOVE
REM Entferne leere Quellordner, falls ROBOCOPY sie nicht entfernt hat
if exist "%%D" rd /s /q "%%D" 2>nul
)
)
)
)
REM ========== TEIL 2: Dateien im Hauptordner sortieren ==========
echo.
echo === Verarbeite Dateien im Hauptordner ===
REM Temporäre Datei für die Dateiliste erstellen
set "TEMP_FILE=%TEMP%\filelist_%RANDOM%.txt"
dir "%HAUPTORDNER%" /tc /a-d /b > "%TEMP_FILE%"
REM Schleife durch alle Dateien im Hauptordner
for /f "delims=" %%F in ('dir "%HAUPTORDNER%" /b /a-d 2^>nul') do (
REM Ermittle das Erstellungsdatum der Datei
for /f "tokens=1-5 delims=.: " %%a in ('dir /tc "%HAUPTORDNER%\%%F" ^| findstr /r /c:"^[0-9]"') do (
set "DAY=%%a"
set "MONTH=%%b"
set "YEAR=%%c"
REM Formatiere Tag und Monat mit führender Null falls nötig
if !DAY! LSS 10 set "DAY=0!DAY!"
if !MONTH! LSS 10 set "MONTH=0!MONTH!"
REM Erstelle den Datumsordner (YYYY-MM-DD)
set "DATUMSORDNER=!YEAR!-!MONTH!-!DAY!"
REM Erstelle den Datumsordner, falls er nicht existiert
if not exist "%HAUPTORDNER%\!DATUMSORDNER!" (
mkdir "%HAUPTORDNER%\!DATUMSORDNER!"
echo Datumsordner !DATUMSORDNER! erstellt.
)
REM Verschiebe die Datei in den entsprechenden Datumsordner
echo Verschiebe Datei "%%F" nach "!DATUMSORDNER!"...
move "%HAUPTORDNER%\%%F" "%HAUPTORDNER%\!DATUMSORDNER!\%%F" >nul 2>&1
REM Verlasse die innere Schleife nach dem ersten Treffer
goto :next_file
)
:next_file
)
REM Temporäre Datei löschen
if exist "%TEMP_FILE%" del "%TEMP_FILE%"
echo.
echo Fertig! Alle Unterordner und Dateien wurden nach Erstellungsdatum sortiert.
pause
Geändert von Klappstulle_mit_Käse (Heute um 11:33 Uhr)
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:13 Uhr.
().
|