Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Ordner nach Dateinamen anlegen und in bestimmtes verzeichnis kopieren

Frage Entwicklung Batch & Shell

Mitglied: Spidi-25

Spidi-25 (Level 1) - Jetzt verbinden

09.09.2010, aktualisiert 20:27 Uhr, 4659 Aufrufe, 13 Kommentare

Moin zusammen

ich benötige wieder mal einen Code für folgende Aufgabe,


z.B.:

Steffi_Bild1.jpg
Steffi_Bild2.jpg
Steffi_Bild3.jpg

Ordner auf z.B. K:\Bilder\Steffi\ anlegen und alle 3 Dateien rein kopieren

Karl_Skiurlaub_Bild1.jpg
Karl_Skiurlaub_Bild2.jpg
Karl_Skiurlaub_Bild3.jpg
Karl_Skiurlaub_Bild4.jpg

Ordner auf z.B. K:\Bilder\Karl_Skiurlaub\ anlegen und alle 4 Dateien rein kopieren


Weihnachten_in_Köln.jpg

Ordner auf z.B. K:\Bilder\Weihnachten_in_Köln\ anlegen und Datei rein kopieren


die CMD möchte ich direkt mit einem File Commander aufrufen.



Thx
Mitglied: 60730
09.09.2010 um 12:23 Uhr
Moin,

das ganze möchte ich direkt mit einem Commander aufrufen also ohne die Zeile

Ich könnte dir mit einem Major Tom aushelfen, aber der hätte sehr wahrscheinlich auch eine Zeile mit Set drin.
Commander James Bond weilt ja gerade in der Drehpause

Bitte schreib das mal um, denn u.a das erste Beispiel geht von
  • 123_456 aus und 123 ist das ziel in k:\bilder
das zweite von

  • 123_456_789 aus und 123_456 ist das ziel in k:\bilder
last but not Least
  • 123_456_789_0ab aus und 123_456_789 ist das ziel in k:\bilder

Also immer bis zum letzten _

Gruß

edit
Ausführen möchte ich es mit dem File Commander
sorry -einer von uns beiden kann sich nicht richtig ausdrücken...
/edit
Bitte warten ..
Mitglied: Spidi-25
09.09.2010 um 12:33 Uhr
Ausführen möchte ich es mit dem File Commander

ich muss noch was korregieren

es gibt manchmal nur ein Foto und dann hat es folgende Dateinamen:

Urlaub_Griechenland.jpg ohne Bild am ende

dann soll ein Ordner Urlaub_Griechenland angelegt werden

Thx
Bitte warten ..
Mitglied: Spidi-25
09.09.2010 um 20:57 Uhr
mit folgendem code wird werden die Daten auf K:\Bilder abgelegt, aber es wird für jede Datei ein Ordner erstellt und das ist falsch.

01.
@echo off & setlocal 
02.
set "Ziel=K:\Bilder\" 
03.
  
04.
for %%t in (jpg) do (  
05.
    for /f %%i in ('dir /b /on /a-d *.%%t') do (  
06.
 
07.
        for /f "tokens=1-6 delims= " %%a in ("%%~ni") do (   
08.
            md "%Ziel%%%a" 2>nul  
09.
            copy "%%i" "%Ziel%%%a">nul  
10.
            
11.
        )  
12.
    )  
13.
)

thx
Bitte warten ..
Mitglied: 60730
09.09.2010 um 22:23 Uhr
moin,


Ich tippte dich auf ein paar ungereimtheiten

  • was ist denn nun dein File Commander?
  • Nimm einfach mal den Code auseinander und werf vor allem @echo off raus.
  • Wenn du Dateien mit einem _ und welche mit zwei _ _ und drei ___ usw. hast mußt du diese auch getrennt verhackstückeln.

Die Tokens 1-6 sind doch von wem wofür auch immer willkürlich gesetzt und das mußt du anpassen.

for /f %%i in ('dir /b /on /a-d *.%%t') do (

Demo 4n Promt
echo hallo>ha_llo.txt
echo hallo>ha_ll_o.txt
echo hallo>h_a_llo.txt
echo hallo>h_a_ll_o.txt

for /f "tokens=1-4 delims=_" %i in ('dir /b /on /a-d *_*_*_*.txt') do echo %i_%j_%k%l
for /f "tokens=1-4 delims=_" %i in ('dir /b /on /a-d *_*_*_*.txt') do md %i_%j_%k\
for /f "tokens=1-4 delims=_" %i in ('dir /b /on /a-d *_*_*_*.txt') do move %i_%j_%k_%l \%i_%j_%k\%l

Ganz ohne echo off

Und das muß natürlich rückwärts aufgenudelt werden, denn

  • dir /b /on /a-d *_*.txt' findet alle
  • dir /b /on /a-d *_*_*.txt' findet nur die nicht, die nur 1_ haben
  • dir /b /on /a-d *_*_*_*.txt' findet nur die nicht, die weniger als 3_ haben

Deshalb der Demo 4n Promt, denn wenn du zuerst die mit drei _ wegmovst, bleiben später nur noch die mit 2 dann einem übrig.


Gruß
Bitte warten ..
Mitglied: Spidi-25
10.09.2010 um 11:07 Uhr
File Commander ist so etwas in der art http://www.efsoftware.com/cw/d.png

mit den Tipps bekomme ich nichts vernünftiges hin, bitte um weitere Hilfe.


Gruß
Bitte warten ..
Mitglied: bastla
10.09.2010 um 18:31 Uhr
Hallo Spidi-25!

Unter der Annahme, dass Du alle Bilder markierst und dann den Batch aufrufst, könnte das etwa so gehen:
01.
@echo off & setlocal 
02.
set "Ziel=K:\Bilder" 
03.
 
04.
:Loop 
05.
if [%1]==[] goto :eof 
06.
echo %~n1|findstr /e "_Bild[0-9]*">nul||( 
07.
    set "Ordner=%~n1" 
08.
    goto :Kopieren 
09.
10.
 
11.
set "Name=%~n1" 
12.
for %%i in (%Name:_=;%) do set "Entfernen=%%i" 
13.
call set "Ordner=%%Name:_%Entfernen%=%%" 
14.
 
15.
:Kopieren 
16.
xcopy %1 "%Ziel%\%Ordner%\" 
17.
 
18.
shift 
19.
goto :Loop
Kurze Erklärung zum Ablauf:
  • Da die Bilder als einzelne Paramter beim Aufruf ankommen, wird nach der Bearbeitung jedes einzelnen Bildes mit "shift" die Parameterliste verschoben, sodass das nächste Bild als %1 zur Verfügung steht - die solange, bis %1 "leer" ist.
  • Wenn der Name ("%~n1") des Bildes nicht auf "Bild" (+ eine oder mehrere Ziffern) endet, kann der Name unmittelbar als Ordnername verwendet werden.
  • Da im anderen Fall die Anzahl der durch "_" getrennten Namensbestandteile nicht bekannt ist, es aber ohnehin nur darum geht, den letzten davon zu elimieren, kann der Name durch das Ersetzen der "_" durch ";" (hier könnte auch ein Leerzeichen verwendet werden) in Einzelteile zerlegt werden - durch die Schleife wird jeder dieser Einzelteile als %Entfernen% gespeichert, was aufgrund des automatischen Überschreibens der vorigen Variableninhaltes dazu führt, dass nach der Schleife die Variable %Entfernen% den letzten Bestandteil, also etwa "Bild1", enthält.
  • Für die Ermittlung des Ordnernamnes wird der in %Entfernen% gespeicherte Teil dann (zusammen mit dem davor befindlichen "_") durch "Nichts" ersetzt.
  • Schließlich kann durch die Verwendung von "xcopy" beim Kopieren automatisch der gewünschte Zielpfad erstellt werden.

Grüße
bastla
Bitte warten ..
Mitglied: Spidi-25
10.09.2010 um 21:13 Uhr
Hallo bastla

aus irgend einem Grund passiert nichts, das Fenster wird für ca. eine 1/4 Sekunde geöffnet und wieder geschlossen, auf K:\Bilder wird auch nichts neues angelegt!

Gruß
Spidi-25
Bitte warten ..
Mitglied: bastla
10.09.2010 um 21:21 Uhr
Hallo Spidi-25!

Dann ändere mal die ersten 5 Zeilen auf
01.
@echo on & setlocal 
02.
set "Ziel=K:\Bilder" 
03.
 
04.
:Loop 
05.
if [%1]==[] pause & goto :eof 
06.
if /i "%~x1" neq ".jpg" shift & goto :Loop
Die (neue) Zeile 6 soll als Absicherung dienen, sodass nur ".jpg"-Dateien verarbeitet werden - wenn das nicht nötig oder erwünscht ist, einfach weglassen ...

Stimmt übrigens die Annahme, dass der Batch für markierte Dateien aufgerufen wird? Wenn nicht, sondern der Batch einen Ordner als Aufrufparameter erhält, dann eher so (und wenn's nicht klappen sollte, ebenfalls mit "echo on" und einer "pause" zwischen Zeile 4 und 5 nachschauen, was da los ist):
01.
@echo off & setlocal 
02.
set "Ziel=K:\Bilder" 
03.
 
04.
for %%i in ("%~1\*.jpg") do call :ProcessFile "%%i" 
05.
goto :eof 
06.
 
07.
:ProcessFile 
08.
echo %~n1|findstr /i /e "_Bild[0-9]*">nul||( 
09.
    set "Ordner=%~n1" 
10.
    goto :Kopieren 
11.
12.
 
13.
set "Name=%~n1" 
14.
for %%i in (%Name:_=;%) do set "Entfernen=%%i" 
15.
call set "Ordner=%%Name:_%Entfernen%=%%" 
16.
 
17.
:Kopieren 
18.
xcopy %1 "%Ziel%\%Ordner%\" 
19.
 
20.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Spidi-25
10.09.2010 um 21:49 Uhr
Hallo bastla

läuft immer noch nicht, es kommt "Drücken Sie eine beliebige Taste" nach dem drücken wird das Fenster geschlossen.

die Dateien werden nicht markiert, es sollen alle im Ordner befindlichen .jpg´s verarbeitet werden,

im Prinzip ungefähr so laufen wie der Code oben, nur das es nicht für jede Datei einen Ordner erstellt!

Gruß
Spidi-25
Bitte warten ..
Mitglied: bastla
10.09.2010 um 21:57 Uhr
Hallo Spidi-25!

Versuchen wir es mit folgender Zeile 4 (für meine letzte Version):
01.
for %%i in (*.jpg) do call :ProcessFile "%%i"
Wenn ich das aus einem Deiner anderen Threads inzwischen richtig herausgelesen habe, wird beim Aufruf kein Parameter übergeben, aber als aktueller Ordner der in Deinem Commander Gewählte verwendet ...

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
10.09.2010 um 22:50 Uhr
moin Spidi-25,

vllt tut es dies hier
01.
@echo off 
02.
 
03.
set Woher="D:\Bilder" 
04.
set "Dorthin=K:\Bilder" 
05.
 
06.
::für einen Test - zum nichttesten set "TEST=echo" zu set "TEST=" ändern oder Zeile löschen 
07.
set "TEST=echo" 
08.
 
09.
pushD %woher% 
10.
for %%i in ("*_*.jpg" "ForLastAction_Picture.jpg") do ( 
11.
	set "In=%%~i" 
12.
	set "VZ=" 
13.
	setlocal enabledelayedexpansion 
14.
	set "Out=!In:_=" "!" 
15.
	for /f "delims=*" %%h in ("!OUT!") do (endlocal 
16.
		for %%j in ("%%h") do ( 
17.
			if not "%%~nj%%~xi"=="%%~j" (setlocal enabledelayedexpansion 
18.
				if defined VZ (for /f "delims=*" %%a in ("!VZ!") do endlocal&set "VZ=%%a_%%~j" 
19.
				) else endlocal&set "VZ=%%~j" 
20.
			) else (setlocal enabledelayedexpansion 
21.
				for /f "tokens=1-3 delims=?" %%a in ("!VZ!?!VZOld!?!FileOLd!") do (endlocal 
22.
					if defined VZOld (if "%%a"=="%%b" (set "Old=1" 
23.
							if not exist "%Dorthin%\%%b\" %TEST% md "%Dorthin%\%%b\" && %TEST% move "%%b_%%c" "%Dorthin%\%%b\%%c" 
24.
						) else ( 
25.
							if defined Old (set "Old=" 
26.
								if not exist "%Dorthin%\%%b\" %TEST% md "%Dorthin%\%%b\" && %TEST% move "%%b_%%c" "%Dorthin%\%%b\%%c" 
27.
							) else for %%k in ("%%c") do if not exist "%Dorthin%\%%b_%%~nk\" %TEST% md "%Dorthin%\%%b_%%~nk\" && %TEST% move "%%b_%%~k" "%Dorthin%\%%b_%%~nk\%%~xk"  
28.
					)	) 
29.
					set "VZOLD=%%a" 
30.
					set "FileOld=%%~j" 
31.
)	)	)	)	) 
32.
popD&pause&goto :eof
Gruß Phil
Bitte warten ..
Mitglied: Spidi-25
10.09.2010 um 23:18 Uhr
Hallo bastla

mit der neuen Zeile 4 hat es geklappt, wie immer Perfekt vielen vielen dank!!!!

mit der vorherigen Zeile 4, wurde ein Bild von D:\ (es befand sich nur ein Bild in D:\) obwohl ich mich im Ordner D:\Bilder\Test befand nach K:\Bilder\Ordnernamen=Bildname Kopiert.

Aber es läuft ja jetzt perfekt Thx.

Grüße
Spidi-25
Bitte warten ..
Mitglied: bastla
11.09.2010 um 09:43 Uhr
Hallo Spidi-25!

Schön, dass es doch noch geklappt hat.
mit der vorherigen Zeile 4, wurde ein Bild von D:\ (es befand sich nur ein Bild in D:\) obwohl ich mich im Ordner D:\Bilder\Test befand nach K:\Bilder\Ordnernamen=Bildname Kopiert.
Lässt sich leicht erklären - wenn als %1 nix ankommt wird aus
"%~1\*.jpg"
"\*.jpg"
was schließlich bedeuet: alle ".jpg"-Dateien des Root-Verzichnisses des aktuellen Laufwerkes - daher also "D:\" ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Ordner erstellen ll Datei hinein kopieren (1)

Frage von heyalice zum Thema Batch & Shell ...

Batch & Shell
gelöst Ordner per Batch verschieben, Datei kopieren (2)

Frage von Shape.Shifter zum Thema Batch & Shell ...

C und C++
Dateien in Ordner kopieren anhand vom Teil eines Dateinamen (22)

Frage von onlyforu8373 zum Thema C und C ...

Batch & Shell
gelöst Batch: Bilder (gewisse Nummern) vom Verzeichnis A in einen Ordner Kopieren (3)

Frage von sagula91 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...