[Win2k] Ordner automatisch erstellen und Dateien kopieren

M

moma

Gast
habe hier viele dateien, die je in einzelne ordner kopiert werden sollten. die ordner sollen die gleichen namen wie die dateien erhalten also je eine datei in einen einzelnen ordner!! kann ich diese vorgehensweise auch mithilfe eines programms oder eines scripts vereinfachen, sodass ich dies nicht alles per hand durchführen muss??

herzlichen dank für eure antwort
 

Ernst_42

schläft auf dem Boardsofa
--- 8< --- als Batch speichern ---
Code:
@echo off

rem rekursiver Aufruf? (1.Parameter == /R)
if %1.==/R. goto rekursiv


rem ein Prameter vorhanden?
if %1.==. goto no_params
set src=%1
:param_

rem erster Prameter sollte der Ordner sein, wo's abgeht
if not exist %src%\* goto err_param


rem und nun für jede Datei innerhalb des Quellordners ...
rem dabei ist:
rem   '%%i'	die "For"-Variable
rem   '%0'	ist das script selbst
rem 1 '/R'	die Markierung für den rekursiven Aufruf
rem 2 '%src%'	der Quellordner
rem 3 '%%~fi'	Laufwerk+Pfad+Name+Erweiterung der Datei
rem 4 '%%~dpsi'	Laufwerk+Pfad+Name+Erweiterung als '8.3'
for %%i in (%src%\*.*) do call %0 /R "%src%" "%%~fi" %%~si
goto end_batch


rem --------------------------------------------------

:rekursiv
rem bin ich's selbst??? Ooops!
if %3.==%0. goto exit_batch

rem check %3 (Datei)
if not exist %3 goto err_R_Datei

rem "falschen" Ordner erstellen ...
if exist %4__\* goto err_R_Dummy
md %4__
rem ... Datei verschieben ...
move %3 %4__ >Nul
rem ... und "falschen" Ordner korrigieren...
move %4__ %3

goto exit_batch


rem --------------------------------------------------

:no_params
echo.
echo. kein Ordner angegeben...
echo. verwende aktuellen Ordner
set src=.
rem ... und Rücksprung
goto param_
rem echo. [Abbruch]
rem echo.
rem goto end_batch


:err_param
echo.
echo. Ordner "%1" scheint nicht zu existieren, kein Zugriff oder nix drin!
echo. [Abbruch]
echo.
goto end_batch

:err_R_Datei
echo. Kein Zugriff auf oder Datei "%3" existiert nicht!
echo. [skip...]
goto exit_batch

:err_R_Dummy
echo. Dummer Zufall...
echo. Dummy-Ordner "%4__" existiert bereits!
echo. [skip...]
goto exit_batch


rem --------------------------------------------------

:end_batch
rem falls noch irgendetwas zu sagen ist...
pause

:exit_batch
--- >8 ---

(Achso, ich hatte ein Verschieben vorgesehen, aber das wäre ja auch schnell wieder durch ein 'copy' ersetzt...)

HTH
 
M

moma

Gast
danke dir viel viel mal, nur ein problem habe ich noch, wie erstelle ich eine batch-datei??

vielen dank für deine geduld
 

hoermann

chronische Wohlfühlitis
Moin,

eine Batchdatei ist nichts anderes als eine Textdatei,
allerdings nicht mit der Endung txt sondern bat.
Einfach den Code reinkopieren und als name.bat speichern.
Damit ist die Datei dann ausführbar.

MfG

Hoermann
 
M

moma

Gast
funktioniert bisher wunderbar, nur möchte ich gerne, dass die dateiendung nicht im ordnernamen auftaucht also nicht "bild.jpg" sondern nur "bild".

wäre sehr froh für eine hilfe
 
A

Aleopheus

Gast
Das stellt man in den Ordneroptionen ein.

Unter WindowsXP in irgendeinem Explorerfesnter (nicht der Internetexplorer, sondern der Dateiexplorer (Normales Dateifenster) ) auf Extras -> Ordneroptionen
Dann auf die Karteikarte Ansicht dann das Häkchen bei

Erweiterung bei bekannten Dateintypen ausblenden aktivieren und für alle Ordner übernehmen ... wenn du dies wünscht.

Fertig.

Grüße

Aleopheus
 

Ernst_42

schläft auf dem Boardsofa
(Ooops, lange nicht mehr hier reingeschaut...)

Wenn du willst, dass der Ordner die (letzte) Erweiterung nicht haben soll, dann ändere in dem Script oben in Zeile 25 die Parameter für die FOR-Schleife.
Am einfachsten hängst du noch einen 5. Parameter mit an, der Pfad und Dateiname aber keine Erweiterung beinhaltet (%%~pni) und änderst noch Zeile 44 und
...

Am besten schreibt man das Script aber dann noch etwas mehr um, da bei nicht zu berücksichtigender Erweiterung die Möglichkeit von "doppelten" Ordnern möglich ist...
Beispielsweise für "Bild1.jpg" und "Bild1.gif"... das würde dann jeweils in den Ordner "Bild1" gespeichert werden wollen!

Meld dich doch noch mal, falls du die Hilfe brauchst, und sag' dann auch, wie du jenes Problem gelöst haben wollen würdest. :D

[Edit]
P.S.
Zur FOR-Schleife hat M$ in der Hilfe zum FOR-Befehl auch die Zusatzmöglichkeiten des Befehls FOR beschrieben. (einfach mal mk:mad:MSITStore:C:\WINNT\Help\ntcmds.chm::/for__additional.htm in die Adresszeile des Explorers eingeben und [Enter] drücken...)
[/Edit]


Grüße
 
Zuletzt bearbeitet:

patrick09

Herzlich willkommen!
ist es auch möglich das der ordner nur die ersten elf zeichen der datei animmt und nach vier einen unterstrich macht?
ich arbeite mit systemnummer z.B 1234567891011_data, diese soll in den ordner 1234_567891011! geht das?
hab leider nur etwas erfahrung in c++ und bring das aleine nicht zussammen

mfg patrick09
 
Zuletzt bearbeitet:

Ernst_42

schläft auf dem Boardsofa
Wuff, einen vier Jahre alten Thread wieder ausgegraben zu sehen...

Ich hab' lange nicht mehr unter Windows Batch-Programmierung gemacht, kenne also nicht die Leistungsfähigkeit der aktuellen Shell...
Aber für das von dir angesprochene Problem (Split des Dateinamens) gab es zu Win98-Zeiten nur die Möglichkeit, einzelne Zeichen eines Strings über einen rekursiven Aufruf zu übergeben. Das hat aber mit dem Script da oben nix zu tun... ich weiß momentan auch nicht, wo ich dazu noch alte Scripte habe; aber man musste in der for-Schleife einen "\" verwenden...
Code:
for %%i in (\%src%) do [...]
oder so ähnlich.
Da ich inzwischen vor einem Mac sitze, kann ich's auch nicht testen, sorry.

Frage an die verehrte Leserschaft: Gibt es mittlerweile "regular expressions" in der Shell?
 

Norbert

Moderator
Teammitglied
Frage an die verehrte Leserschaft: Gibt es mittlerweile "regular expressions" in der Shell?
Nicht in der Standard-Shell cmd.exe von Windows.
Aber die Take Command Console LE (Freeware) kann das.
Auch die Scriptsprache der Batch ist da sehr mächtig.
Das oben genannte Problem lässt sich damit sehr leicht lösen.

Gruß
Norbert
 
Zuletzt bearbeitet:

patrick09

Herzlich willkommen!
Nicht in der Standard-Shell cmd.exe von Windows.
Aber die http://www.drwindows.de/betriebssystem-erweiterungen/38674-take-command.html Console kann das.
Auch die Scriptsprache der Batch ist da sehr mächtig.
Das oben genannte Problem lässt sich damit sehr leicht lösen.

Dass heißt? .....

sorry, auf das datum hab ich garnicht geachtet, aber danke das ihr euch damit auseinandergestzt habt! vlt komm ja noch etwas raus, währe euch sehr dankbar

mfg patrick
 

Norbert

Moderator
Teammitglied
Das heißt, die Take Command Console herunterladen und als Ersatz oder Ergänzung der CMD.EXE installieren. Starten und in der Konsole mit F1 die Hilfedatei aufrufen. Tja, und dann bleibt es Dir leider nicht erspart, Dich dort durchzuarbeiten.

Die Batch-Programmierung entspricht im Umfang fast schon einer normalen Programmiersprache und will erstmal erlernt sein. Dasselbe gilt für den stark erweiterten Umfang der Konsolenbefehle. Selbst simple und bekannte Befehle wie z.B. "dir" haben viel mehr Parameter als die Windows-Konsole.

Gruß
Norbert
 

Fr4gGy

Herzlich willkommen!
Hallo ...

Ich habe mir mal gespannt eure Antworten auf den Thread durchgelesen und bin total beeindruckt ... In Sachen Programierung habe ich leider absolut keine Ahnung =((

Ich habe mal eine Frage bezüglich der Umbennung und das Kopieren in einen Ordner.

Also

Ich habe mindestens 2000 lose Titel von diversen Interpreten.
Das ganze ist z.B. so aufgebaut: Alphaville - Big in Japan

Kann bitte jemand von euch so nett sein und mir zeigen bzw sagen was ich machen muss, wenn ich nur für "Alphaville" einen dementsprechenden Ordner haben möchte, in dem dann aber der komplette Name ~> "Alphaville - Big in Japan" erscheint?

Es geht mir wie gesagt nur um den Interpreten (sprich das nur von diesem ein Ordner erstellt wird) und das eben der komplette Dateiname in diesem Ordner erscheint.

Ich brauch wirklich Hilfe =((

gruß

Krischan
 

Ernst_42

schläft auf dem Boardsofa
Hallo Fr4gGy und auch von mir herzlich willkommen,

zu deinem "Problem" hätt' ich da noch zwei Fragen und einen Tipp:

1. Was genau möchtest du damit machen?
(Denn wenn es um die reine Verwaltung geht, warum sich dann auf eine Lösung festlegen?)

2. Kannst du sicherstellen, dass in den Namen der Interpreten oder der Titel kein "-" vorkommt? Wie sollte eine Routine sonst unterscheiden können, was zum Interpreten und was zum Titel gehört?

...und der Tipp:
Wenn du unbedingt die Titel in Ordnern haben willst, dann guck dir mal Apples iTunes an (ja, das gibt es auch für Windoofs).
Ich sitze hier - wie gesagt - vor einem Mac und verwalte meine Musik mit iTunes. Auf der HDD gliedert iTunes von sich aus die Titel in Ordnern (Album als Ordner, Interpret als Unterordner, Titel als Datei).

Wobei du dann natürlich noch beim Einbinden der Dateien in iTunes ein schönes Stück Arbeit hast (Korrekturen der Titel und Interpreten, falls die mp3-Tags fehlen).

Grüße
 
Oben