Batch Datein aus Unterordnern in einen Hauptordner verschieben und Durchnummerieren
Guten Abend,
Ich habe mal wieder en kleines Problem...
Ich habe einen Hauptordner in dem sich eine sehr große Ordnerstrucktur befindet.
Auserdem noch so ca 30.000-150.000 Datein.
Um das unwichtige schonmal zu beseitigen, werde ich alle Datein <50kb Löschen.
Batch - Dateien unter bestimmter Größe löschen
Nun möchte ich alle übrig geblieben Datein in einen Ordner verschieben (also ohne ordnerstruktur)
und diese Durchnummerieren das sie so aussehen.
000001
000002
...
Wie ich diese Nummerierung mache wenn schon alle Datein in einem ordner sind, weiß ich.
Das Problem ist, dass es manche Dateinamen schon gibt. Also müssten sie schon beim verschieben umbenant werden.
Mir schwirren schon so einige Lösungsansätze vor, aber mal schaun was ihr noch so drauf habt.
Ich setz mich mal dran mal gespannt obs ich sogar noch selbst hinbekomme.
Grüße
Darkprodukt
Edit1:
Ich denke das müste so in etwa aussehen, aber leider Beendet sich das ding ohne einen mucks...
Natürlich muss das @echo in der 1. for-schleife gelöscht und das @echo in der 2. zu move geändert werden.
Ich habe mal wieder en kleines Problem...
Ich habe einen Hauptordner in dem sich eine sehr große Ordnerstrucktur befindet.
Auserdem noch so ca 30.000-150.000 Datein.
Um das unwichtige schonmal zu beseitigen, werde ich alle Datein <50kb Löschen.
Batch - Dateien unter bestimmter Größe löschen
Nun möchte ich alle übrig geblieben Datein in einen Ordner verschieben (also ohne ordnerstruktur)
und diese Durchnummerieren das sie so aussehen.
000001
000002
...
Wie ich diese Nummerierung mache wenn schon alle Datein in einem ordner sind, weiß ich.
Das Problem ist, dass es manche Dateinamen schon gibt. Also müssten sie schon beim verschieben umbenant werden.
Mir schwirren schon so einige Lösungsansätze vor, aber mal schaun was ihr noch so drauf habt.
Ich setz mich mal dran mal gespannt obs ich sogar noch selbst hinbekomme.
Grüße
Darkprodukt
Edit1:
Ich denke das müste so in etwa aussehen, aber leider Beendet sich das ding ohne einen mucks...
Natürlich muss das @echo in der 1. for-schleife gelöscht und das @echo in der 2. zu move geändert werden.
@echo off & setlocal
set /a count=1000001
set /p "Ordner=Ordner: "
set /p "Ziel=Ziel: "
for /f %%i in ('dir /a-s-h-d /b /s "%Ordner%"') do @if %%~zi lss 40000 @echo del "%%i"
for /f %%i in ('dir /a-s-h-d /b /s "%Ordner%') do set "datei=%%i" ^
&setlocal enabledelayedexpansion ^
&@echo "!datei!" "!Ziel!!count:~-6!%%~xj" ^
&set /a count=count+1 ^
&endlocal
echo Abgeschlossen
pause
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 189248
Url: https://administrator.de/contentid/189248
Ausgedruckt am: 08.11.2024 um 02:11 Uhr
6 Kommentare
Neuester Kommentar
Moin Darkprodukt,
ohne auf die Sinnhaftigkeit des Plans einzugehen wäre dein Ansatz ungefähr so lauffähig:
P.S. Zwei der goldenen Regeln sowohl beim Sich-Ausprobieren in Batch wie auch im Kamasutra:
Grüße
Biber
ohne auf die Sinnhaftigkeit des Plans einzugehen wäre dein Ansatz ungefähr so lauffähig:
@echo off & setlocal enabledelayedexpansion
set /a count=1000001
set /p "Ordner=Ordner: "
set /p "Ziel=Ziel: "
for /f %%i in ('dir /a-s-h-d /b /s "%Ordner%"') do @if %%~zi lss 40000 @echo del "%%i"
for /f %%i in ('dir /a-s-h-d /b /s "%Ordner%"') do (
echo move "%%i" "%Ziel%\!count:~-6!%%~xi"
set /a count+=1
)
echo Abgeschlossen
pause
P.S. Zwei der goldenen Regeln sowohl beim Sich-Ausprobieren in Batch wie auch im Kamasutra:
- Kompliziert wird es von allein.
- Kunstvolle Verrenkungen haben nicht immer etwas Graziles an sich.
Grüße
Biber
Hallo Biber!
Dass "
Grüße
bastla
Dass "
delayedexpansion
" sich auch bei den Laufvariablen von "for
"-Schleifen auswirkt, hatte ich auch lange nicht beachtet - daher vielleicht doch:@echo off & setlocal
set /a count=1000001
set /p "Ordner=Ordner: "
set /p "Ziel=Ziel: "
if "%Ziel:~-1%"=="\" set "Ziel=%Ziel:~,-1%"
for /f "delims=" %%i in ('dir /a-s-h-d /b /s "%Ordner%"') do @if %%~zi lss 40000 @echo del "%%i"
for /f "delims=" %%i in ('dir /a-s-h-d /b /s "%Ordner%"') do (
set "Datei=%%i"
setlocal enabledelayedexpansion
echo move "!Datei!" "%Ziel%\!count:~-6!%%~xi"
endlocal
set /a count+=1
)
echo Abgeschlossen
pause
bastla
Moin bastla,
ist mir zwar abstrakt einsichtig, aber bei welchem Inhalt der Variablen %Datei% könnte denn ein Unterschied auftreten zwischen dem aufgelösten
Oder an welcher Stelle wird durch das
Grüße
Biber
ist mir zwar abstrakt einsichtig, aber bei welchem Inhalt der Variablen %Datei% könnte denn ein Unterschied auftreten zwischen dem aufgelösten
echo move "!Datei!" "%Ziel%\!count:~-6!%%~xi"
versus echo move "%%i" "%Ziel%\!count:~-6!%%~xi"
??Oder an welcher Stelle wird durch das
setlocal enabledelayedexpansion
innerhalb der FOR-Anweisung ein Problem vermieden?Grüße
Biber
Hallo Biber!
Mit einer zusätzlichen Zeile
und den folgenden Dateien:
sieht das etwa so aus:
Grüße
bastla
Mit einer zusätzlichen Zeile
echo move "%%i" "%Ziel%\!count:~-6!%%~xi"
D:\>dir "Dieser! Ordner"
Datenträger in Laufwerk D: ist Volume
Volumeseriennummer: 1234-5678
Verzeichnis von D:\Dieser! Ordner
08.08.2012 09:54 <DIR> .
08.08.2012 09:54 <DIR> ..
08.08.2012 09:55 2 Zwei ! im Namen.txt
08.08.2012 09:55 2 Wirklich zwei !! im Namen.txt
2 Datei(en) 4 Bytes
2 Verzeichnis(se), 69.363.770.624 Bytes frei
D:\>NummeriertZusammenfassen.cmd
Ordner: Dieser! Ordner
Ziel: X:\
del "D:\Dieser! Ordner\Zwei ! im Namen.txt"
del "D:\Dieser! Ordner\Wirklich zwei !! im Namen.txt"
move "D:\Dieser! Ordner\Zwei ! im Namen.txt" "X:\000001.txt"
move "D:\Dieser im Namen.txt" "X:\000001.txt"
move "D:\Dieser! Ordner\Wirklich zwei !! im Namen.txt" "X:\000002.txt"
move "D:\Dieser\000002.txt"
Abgeschlossen
Drücken Sie eine beliebige Taste . . .
bastla
Moin bastla,
okay, okay.... ja, es könnte vorkommen.
In "Per Anhalter durch die Galaxis" wird so etwas als Antrieb für Raumschiffe benutzt.
Wahrscheinlich wird der Batchschnipsel dennoch abrauchen, weil plötzlich ein fliederfarbener Meteorit die USV des Unternehmens durchschlägt...
Danke und Grüße
Biber
okay, okay.... ja, es könnte vorkommen.
In "Per Anhalter durch die Galaxis" wird so etwas als Antrieb für Raumschiffe benutzt.
Wahrscheinlich wird der Batchschnipsel dennoch abrauchen, weil plötzlich ein fliederfarbener Meteorit die USV des Unternehmens durchschlägt...
Danke und Grüße
Biber