sk1412
Goto Top

Unterverzeichnisse erstellen - anhand Dateiname

Hallo Adminexperten
freu mich sehr über einen Tip face-smile
Besten Gruss sk1412

Hallo Admin-Experten face-smile

möchte gern Folgendes erreichen:
in einem Verzeichnis existieren VIIIIIIEEEELE Dateien (über 10.000 Dateien) mit der "Logik" im Dateinamen
JJJJMMTT_hhmmss_xxx.jpg /.mov /.txt ..usw
Ich bin auf der Suche nach einer Möglichkeit, diese Dateien in Unterordnern zu verschieben.
Diese Unterordner existieren noch nicht.
Meine Idee:
Erstelle ein Unterverzeichnis für jedes Jahr/jeden Monat
und verschiebe alle relevanten Dateien in die richtigen Verzeichnisse

Also:
Erstelle ein Verzeichnis mit dem Namen z.b. 200909
und kopiere alle Dateien, die mit dem Namen 200909 beginnen in dieses Verzeichnis
Das sollte dann für ALLE Dateien durchgeführt werden.
Dasselbs soll natürlich für alle anderen Dateien nach der gleichen Logik durchgeführt werden.

Ich würd mich seeehr über einen Tip freuen, um die Riesenflut an Dateien zu sortieren

Besten Dank im voraus
sk1412
Stefan
Kommentar vom Moderator Biber am Sep 21, 2009 um 20:03:44 Uhr
Na ja, ich verschiebe den Beitrag schon mal von "Windows" nach"Batch & Shell".

Auch wenn da wieder dieses "Dank im voraus" drinsteht.

Grüße Biber

Content-Key: 125457

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

Printed on: April 23, 2024 at 11:04 o'clock

Member: bastla
bastla Sep 21, 2009 at 21:35:18 (UTC)
Goto Top
Hallo sk1412!

Etwa so:
@echo off & setlocal
set "Basis=D:\Das Verzeichnis"  

pushd "%Basis%"  
for /f "delims=" %%i in ('dir /b /a-d') do call :ProcessFile "%%i"  
popd
goto :eof

:ProcessFile
set "Datei=%~1"  
set "Verz=%Datei:~,6%"  
if not exist "%Verz%" md "%Verz%"  
move "%Datei%" "%Verz%"  
goto :eof
Grüße
bastla
Member: pieh-ejdsch
pieh-ejdsch Sep 21, 2009 at 22:30:44 (UTC)
Goto Top
Hallo sk1412,

[edit]
ups ich war wohl zu lange woanders beschäftigt.
ich sollte mich doch mal auf meine sachen konzentrieren.....
[/edit]

ja "besten Dank im Vorraus" wird nicht gerne gesehen dafür aber ein Danke wenn geholfen worden ist. Und bei Erfolg danach bitte den grünen Haken setzen.

hier ist Dein code mit vorschaufunktion und anschliessender Bestätigungsfrage.
einfach den Ordner wo die ganzen dateien drin sind auf den Batch ziehen oder im CMD Batchname "ordnername"

:: ------- schnipp movefiles2-0,6-namefolder.bat
@echo off & setlocal
if exist "%~1." (pushD "%~1") else goto :eof  
set "Vorschau="& set "proceed="  
echo.Es erfolgt erst eine Vorschau&echo.& ping localhost -n 3 >nul
:begin
if not defined Vorschau (set "Vorschau=@echo."&goto :proceed) else set "Vorschau="  
echo.&echo.&echo.
set /p proceed=Moechtest Du die Daten wie es angezeigt wurde Verschieben? [J] [N]
if  /i "%proceed%" neq "j" goto :eof  
:proceed
for %%i in (*) do (set "name=%%i"  
	setlocal enabledelayedexpansion
	%Vorschau%
	if not exist "!name:~0,6!" %Vorschau%mkdir "!name:~0,6!"  
	%Vorschau%move "!name!" "!name:~0,6!\!name!"  
	endlocal
)
if not defined proceed goto :begin
popD
:: ------- schnapp movefiles2-0,6-namefolder.bat

Gruß Phil
Member: bastla
bastla Sep 21, 2009 at 22:57:11 (UTC)
Goto Top
@ph
Nice face-smile - allerdings funktioniert die Zeile 10 (bei mir) in der Form
if /i "%proceed%" neq "j" goto :eof
besser - in Deiner Fassung endet's (bei mir) mit
""j"" ist syntaktisch an dieser Stelle nicht verarbeitbar.
Der Ordnung halber könntest Du auch noch das schließende Anführungszeichen in Zeile 12 setzen.

Grüße
bastla

P.S.: Die Vorschau für 10.000+ Dateien könnte etwas ermüdend wirken ... face-wink
Member: pieh-ejdsch
pieh-ejdsch Sep 21, 2009 at 23:44:05 (UTC)
Goto Top
@ bastla

das " in Zeile 12 hab ich übersehen...
hab mal die 2 Zeilen angepasst...

warum allerdings bei Dir %proceed% mit umschliessenden Gänsefüschen kommt frag ich mich....
bei mir ist es ohne
set /p macht doch gar keine Gänsefüschen drumherum
Hhhmmmm...

ich hab mal %windir%\system32 draufgezogen über 2300 Files nichtmal 2 sekunden also so lange dauerts nicht....

Gruß Phil
Member: bastla
bastla Sep 22, 2009 at 06:53:41 (UTC)
Goto Top
@ph
warum allerdings bei Dir %proceed% mit umschliessenden Gänsefüschen kommt frag ich mich....
bei mir ist es ohne
set /p macht doch gar keine Gänsefüschen drumherum
Hhhmmmm..,
Davon, dass der Fehler bei Dir nicht auftritt, war ich ausgegangen (deshalb auch der zweimalige Hinweis "bei mir"), aber es war schon spät und ich hatte keine Lust mehr, der Sache nachzugehen ...

Mit einer Umkehrung von "not" und "/i" klappt's übrigens auch bei mir:
if /i not "%proceed%" == "j" goto :eof
(was in der Hinsicht logisch erscheint, dass "/i" eine Option von "if" und nicht von "not" ist).
ich hab mal %windir%\system32 draufgezogen über 2300 Files nichtmal 2 sekunden also so lange dauerts nicht....
Die Ausgabe nicht, aber das Lesen ... face-wink

Grüße
bastla
Member: Biber
Biber Sep 22, 2009 at 07:47:39 (UTC)
Goto Top
<OT>
@pieh-ejdsch
set /p macht doch gar keine Gänsefüschen drumherum
WTF ist "Gänsefüschen"??? So was wie Hochseeangeln für die armen Verwandten auf'm platten Land?

Außerdem werden wohl einige Worte südlich des Mittellandkanals zwar mit "ü" ("Hürsch", "Kürche", "Der Herr ist mein Hürte" , "Füschen" ) gesprochen, aber doch mit "i" geschrieben, oder?

P.S. Wir in Bremen würden auch niemals bei 10000 Dateien eine Vorschaufunktion auch nur andenken..*gg

Grüße
Biber
</OT>
Member: pieh-ejdsch
pieh-ejdsch Sep 22, 2009 at 08:29:09 (UTC)
Goto Top
[OT]
@Biber

ja gut normal schon Gänsefüßchen statt Gänsefüschen....es war schon spät...

ist so der (/mein) sprachgebrauch für Anführungszeichen ....

leider weis ich kein Kürzeres Synonym dafür nur ein Längeres: Federfiehlatschen

[/OT]

ja das mit der Vorschau für 10.000 Files ist schon schlecht - stimmt
für zum Überfliegen der Vorschau bei wenigen 100 Files wäre es zum Prüfen vllt noch OK.

im Grunde hab ich es nur benutzt um bei mir zu testen.

das if /i not
was anderes ist als if not /i
wusste ich nicht vllt nur ein schusselfehler aber nicht mit absicht eingebaut.

Gruß Phil

PS. gibts noch ein Feedback vom Threadstarter?
Member: sk1412
sk1412 Sep 22, 2009 at 19:03:49 (UTC)
Goto Top
Hey Phil,
erst einmal vielen Dank für die schnelle Antwort !
Ich habe es heute abend erst einmal mit ein paar hundert Dateien probiert -
und es hat wunderbar funktioniert ! Einfach Perfekt - Danke !
Bevor ich mich jetzt an die vielen Dateien "ran mache"

ich bin kein Experte auf der DOS-Ebene ;O - das letzte Mal habe ich mcih vor ca 15 Jahren
mit DOS im "Groben" beschäftigt - und vielen von Deinen Code-Zeilen verstehe ich nicht.
Deswegen bin ich von deinen wenigen Codezeilen einfach nur begeistert
und stelle mir die Frage: Warum teure Programme kaufen, wenn wohl vieles über DOS
einfach und schnell "erledigt" werden kann - auch noch in Windows-Zeiten ;)

aber eine Frage habe ich:
Gibt es auch einen Code, der den ganzen Weg "anders" herum ausführt ?
Also: ALLE Dateien aus ALLEN Unterverzeichnissen in das "Grundverzeichnis" verschieben ?
Oder soll ich dafür besser einen weiteren Thread aufmachen ?

noch eine kleine weitere Frage:
im Code-Fenster kann ich "in den Speicher kopieren" anklicken. Wenn ich dann den
Inhalt im Editor einfüge, werden die Zeilennummern mit eingefügt - die ich dann manuell
löschen musste. .... geht das auch einfacher ?
### hat sich erledigt: muss einfach nur "Quelltext" anklicken - sorry für die vorschnelle Anfrage ###

Besten Gruß
sk1412
Stefan
Member: pieh-ejdsch
pieh-ejdsch Sep 22, 2009 at 22:41:25 (UTC)
Goto Top
hallo sk1412,

bei Dir lief das Ding mit Verschieben?
ich habe ja den Batch nur bis zum J N getestet und immer N gedrückt.
bei mir ging der Batch überhaupt nicht mit verschieben....warum - warscheinlich weil /i und not im IF net geht...KA

aber der Orndung halber einen korregierten Batch:
:: ------- schnipp movefiles2-0,6-namefolder.bat
@echo on & setlocal
if exist "%~1" (pushD "%~1") else goto :eof  
set "Vorschau="& set "proceed="  
echo.Es erfolgt erst eine Vorschau&echo.& ping localhost -n 3 >nul
:begin
if not defined Vorschau (set "Vorschau=@echo."&goto :proceed) else set "Vorschau="  
echo.&echo.&echo.
set /p proceed=Moechtest Du die Daten wie es angezeigt wurde Verschieben? [J] [N]
if /i "%proceed%" == "j" (echo. >nul) else goto :eof  
:proceed
for %%i in (*) do (set "name=%%i"  
	setlocal enabledelayedexpansion
	%Vorschau%
	if exist "!name:~0,6!" (%Vorschau%move "!name!" "!name:~0,6!\!name!"  
	) else %Vorschau%mkdir "!name:~0,6!" && %Vorschau%move "!name!" "!name:~0,6!\!name!"  
	endlocal
)
if not defined proceed goto :begin
popD
pause
:: ------- schnapp movefiles2-0,6-namefolder.bat

eine Rückieb Batch habe ich auch irgendwo hier auf der Platte rumliegen..ja war die denn .. so hier.
Achtung da Dürfen aber keine Dateiname identisch sein aber bei Deinen Files habne ja alle einen Vorsatz im Dateinamen der den Ordner entspricht. die Ordner werden anschliesend alle wieder gelöscht. wenn Du das net willst dann entferne && rmdir %%i

pushD "%~1"  
for /f "tokens=*" %%i in ('dir /a:d /b') do (move "%%i\*.*"  && rmdir %%i)  

so ab inne haia muss morgen meine Kisten & Säcke Packen und Möbel zerlegen.

Gruß Phil
Member: sk1412
sk1412 Sep 23, 2009 at 20:21:46 (UTC)
Goto Top
Hallo Phil
vielen Dank für Deine Antwort --- und wie ich verstehe, bist Du wohl im "Umzugs-Stress"
Hoffe sehr, dass Du alles gut "über die Wupper bekommst" - Drücke die Daumen !!
Wenn das Packen und Zerlegen so funktioniert wie dein Antwortverhalten im Thread
... dann kann ja nix schief gehen *g

Wenn Du Zeit und Lust hast:
Könnte man den letzten Code (ALLE Dateien aus ALLEN Unterverzeichnissen in das "Grundverzeichnis" verschieben) so verändern, dass - falls es DOCH doppelte Dateien gibt -
diese Dateien automatisch mit einer Ergänzung - z.b. 20090923_... (2).jpg-
also mit der Ergänzung (2) -oder andere- abspeichern kann.
Warum ich das frage ?
Ich musste aufgrund eines massiven Festplattenfehlers die Dateien mit
verschiedenen Recovery-Tools wiederherstellen.
Nur leider funktionieren diese Programme mit sehr unterschiedlicher Qualität.
Bei manchen Dateien sind zwar die Dateigrößen OK, aber die Inhalte lassen sich nicht anzeigen.
Andere Programme erlauben das recovery einzelner Dateien einwandfrei zu.
Welchen Programm welche Dateien einwandfrei wiederherstellen kann, ist auf den ersten Blick
nicht erkennbar. Deshalb habe ich vor, alle Recovery-Verzeichnisse in EIN Verzeichnis zu kopieren
um dann die Prüfung auf "korrekte" Dateien besser nachvollziehen zu können.
Ich hoffe, ich konnte mein Probl. einigermassen deutlich beschreiben
und freue mich auf eine Antwort face-smile))))

Besten Gruß und lass dich vom "Packen und Zerlegen" nicht Mürbe machen ;)
Besten Gruss sk1412 Stefan