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

Dateinamen einlesen, auftrennen, umsortieren ... Datei umbenennen

Frage Entwicklung Batch & Shell

Mitglied: evotoy

evotoy (Level 1) - Jetzt verbinden

03.04.2010 um 15:18 Uhr, 9116 Aufrufe, 15 Kommentare

Hi,

schöne Ostern erst mal an alle!!!

ich wollt mal wieder ne tolle batch schreiben aber ich scheiter schon im Ansatz!!! Ich hab hier schon alles durchforstet und auch einige Ansätze gefunden - so richtig bin ich damit aber nicht weiter gekommen ....

der Plan: Dateien in einem Ordner umbenennen - und zwar:

Dateiname0001.jpg in 01-Dateiname.jpg
Dateiname0002.jpg in 02-Dateiname.jpg

Dateiname_occlusion0001.jpg in 01-Dateiname-occlusion.jpg
Dateiname_occlusion0002.jpg in 02-Dateiname-occlusion.jpg

ich versuch's glaub ich wieder viel zu kompliziert anzugehen ... mit welchem Befehl geht das denn? geht das in einem Durchgang oder muss man das in mehrerern Schritten machen?
Mitglied: AndreasBrecht
03.04.2010 um 15:35 Uhr
01.
Set fso = CreateObject("Scripting.FilesystenObject") 
02.
Set fldr = fso.GetFolder("DerPfad") 
03.
For Each fl in fldr.files 
04.
  File.name = Mid(fl.Name, Len(fl.Name) - 6, 2) & Left(fl.Name, Len(fl.Name) - 8) & ".jpg" 
05.
Next
Das Umbenennen müsste evtl angepasst werden, wenn nich alle jpg und/oder die Nummern nicht immer 4-stellig sind
Bitte warten ..
Mitglied: bastla
03.04.2010 um 16:37 Uhr
Hallo evotoy!

Als Batch ungetestet etwa so (ebenfalls unter der Voraussetzung, dass die letzen 4 Stellen entfernt werden sollen):
01.
@echo off & setlocal 
02.
set "Ordner=D:\Testordner" 
03.
set "Maske=*.jpg" 
04.
 
05.
pushd "%Ordner%" 
06.
for /f "delims=" %%i in ('dir /b %Maske%') do set "Name=%%~ni" & call :ProcessFile "%%i" 
07.
popd 
08.
goto :eof 
09.
 
10.
:ProcessFile 
11.
echo ren %1 "%Name:~-2%%Name:~,-4%%~x1"
Das "echo" in der Zeile 11 steht zum Testen da - so wird der Befehl zum Umbenennen nur angezeigt, aber noch nicht ausgeführt; wenn's vernünftig aussieht, einfach dieses "echo" entfernen ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
03.04.2010 um 16:43 Uhr
@AndreasBrecht
wenn nich alle jpg
... lässt sich einfach über
... & "." & fso.GetExtensionName(fl.Name)
lösen (und "GetBaseName()" könntest Du dann auch gleich einbauen) ...

Grüße
bastla
Bitte warten ..
Mitglied: evotoy
03.04.2010 um 16:53 Uhr
Hi,

danke!!! ich kuck mir das später gleich mal an ... muss leider erst noch n paar Osteraktivitäten mitmachen ...

ich werd's denk ich erst mal mit der Batch probieren. Das VBS versuch ich dann auch mal wenn die batch geht
Bitte warten ..
Mitglied: AndreasBrecht
03.04.2010 um 17:24 Uhr
Hallo bastla,

Danke für den Tipp. Die beiden Funktionen habe ich schon immer vermisst. Ich hätte nur nicht gedacht, dass die Blinden von Microsoft, die dierekt unter dem Filesystemobjekt einsortiert haben.
Bitte warten ..
Mitglied: evotoy
03.04.2010 um 19:56 Uhr
so ... ich hab grad versucht den schnipsel auseinanderzuklamüsern - deshalb fehlen da auch ein paar Zeilen weiter unten. Ich fürchte ich werde mit den batch codes nicht warm ... ok ... ich versuch mal den code zu übersetzen. Vielleicht kann mir jemand behilflich sein ... ich würde es gerne verstehen!!

set "Maske=00??.*"

das ist klar soweit - quasi ne suchmaske um die dateien zu filtern, die umbenannt werden sollen.

for /f "delims=" %%i in ('dir /b %Maske%') do set "Name=%%~ni" & call :ProcessFile "%%i"

hätt ich so bestimmt erst nach nem Monat zusammen gehabt ... also ne Schleife, die für alle dateien in die variable "name" den dateinamen (%%~ni) schreibt und dann zu der sprungmarke hüpft, richtig?

echo ren %1 "%Name:~-2%%Name:~,-4%%~x1"

so ... hier wird's schwierig für mich ... ich find hier nicht mal den Anfang und das Ende ... ren kann ja nicht so viel. Das heißt, da müsste jetzt " ren 'nameALT' 'nameNEU' " drin stehen. Was macht denn die Zeile genau? Am besten Zeichen für Zeichen ... sorry!! ... könnte der code heißen: setzte den Namen zusammen aus den letzten zwei Zeichen des alten Namens und dem alten Namen ohne die letzten vier zeichen? welche % gehören denn dann wozu? und ist die "%1" der erste Dateiname im ren Befehl? müsste ja ... wieso steht dann da ne 1 und keine Zählvariable %i oder so was ...

danke!!
Bitte warten ..
Mitglied: bastla
03.04.2010 um 20:05 Uhr
Hallo evotoy!
setzte den Namen zusammen aus den letzten zwei Zeichen des alten Namens und dem alten Namen ohne die letzten vier zeichen?
Genau das ist der Plan.

Etwas zerpflückt am Beispiel der Datei "Dateiname0001.jpg":

  • %1 ist der beim Aufruf übergebene komplette Dateiname "Dateiname0001.jpg" (das Unterprogramm ab ":ProcessFile" verhält sich in dieser Hinsicht wie eine weitere Batchdatei und übernimmt daher Aufrufparameter als %1, %2 etc)
  • %Name:~-2% liefert "01" (in der Variablen %Name% steht ja nur "Dateiname0001"),
  • %Name:~,-4% (könnte auch %Name:~0,-4% geschrieben werden) bildet den Teilstring ab Zeichen 1 (bzw beginnend nach dem "Zeichen Nr. 0") bis 4 Zeichen vor dem Ende, also "Dateiname0001", und
  • %~x1 steuert den Typ (samt Punkt davor) bei - demnach ".jpg"

Zur Teilstringbildung siehe set /? ...

Grüße
bastla
Bitte warten ..
Mitglied: evotoy
04.04.2010 um 09:02 Uhr
Hi,

vielen Dank bastla ... also das läuft jetzt und ich habs auch verstanden ... wenn man weiß, was man googeln muss findet man auch ne Menge ;)

ich hab mal versucht, meine letzte batch und die neue zusammen zu schmeißen. In der letzten wurden auch wieder ein Teil vom Namen abgesplittet und dann damit ein Ordner erstellt, in den die Dateien kopiert wurden. Das Script funktioniert so weit - es kommt also genau das raus, was rauskommen soll. Allerdings denke ich , dass das ziemlich unsauber ist. Ich hab auch schon andere Wege probiert. Die haben aber nicht geklappt, so dass ich nun bei der Version gelandet bin ...

1. kann man das in einer Batch elegant lösen? Ist der Ansatz mit den Sprungmarken ok oder ist der schrott?

2. ich hab da ziemlich viele Sprungarken drin - find ich ... ich hab auch gemerkt, dass das script extrem langsam geworden ist im Vergleich zu der Version ohne die Marken.
woher kommt das?

3. Hat das Script einen Fehler, den ich nicht verstehe. Nach dem Druchlaufen des Scripts hängt das Ding in ner Schleife fest wo gar keine ist ... Der Ausdruck "Sortiervorgang beendet" kommt einfach unendlich??????? so dass man das CMD Fenster schließen muss.

Das Ding ist, dass erst die Umbenennung laufen müsste und dann das verschieben - es sollen nämlich beim Verschieben auch Dateien berücksichtigt werden, die bereits die Namenskonvertierung haben. Hier mal der Code dazu

01.
@echo off 
02.
 
03.
echo __________________________________________ 
04.
echo __________///  Umbenennen \\\_____________ 
05.
echo __________________________________________ 
06.
 
07.
set "MaskRename=*00??.*" 
08.
 
09.
:1 
10.
for /f "delims=" %%i in ('dir /b %MaskRename%') do set "Name=%%~ni" & call :2 "%%i" 
11.
 
12.
echo __________________________________________     
13.
echo Umbenennen beendet.    
14.
echo __________________________________________     
15.
goto :3 
16.
 
17.
 
18.
:2 
19.
set name=%name:_occlusion=-occlusion% 
20.
ren %1 "%Name:~-2%-%Name:~,-4%%~x1"  
21.
echo %1 "%Name:~-2%-%Name:~,-4%%~x1" 
22.
goto :1 
23.
 
24.
:3 
25.
 
26.
echo __________________________________________ 
27.
echo ___________///  Sortieren \\\_____________ 
28.
echo __________________________________________ 
29.
 
30.
set "MaskSort=??-*.*" 
31.
 
32.
:5 
33.
for /F "delims=" %%i in ('dir/b %MaskSort%') do set "Name1=%%~ni" & call :4 "%%i" 
34.
 
35.
goto :6 
36.
 
37.
:4 
38.
    if exist "%Name1:~3%" ( 
39.
        move "%name1%%~x1" "%Name1:~3%\" 2>NUL 
40.
	rem goto :5  
41.
    ) ELSE ( 
42.
        echo __________________________________________     
43.
        echo              Erstelle Ordner   : %Name1:~3%    
44.
        echo __________________________________________         
45.
 
46.
        md "%Name1:~3%" 2>NUL 
47.
        move "%name1%%~x1" "%Name1:~3%\" 2>NUL 
48.
	rem goto :5	 
49.
50.
goto :5 
51.
 
52.
:6 
53.
echo __________________________________________     
54.
echo Sortiervorgang beendet.     
55.
echo __________________________________________   
56.
goto :eof 
57.
pause 
58.
 
Danke und vg,
Bitte warten ..
Mitglied: bastla
04.04.2010 um 11:04 Uhr
Hallo evotoy!
ich hab mal versucht, meine letzte batch und die neue zusammen zu scheißen.
Vielleicht wäre "gut zureden" (auch im Hinblick auf den Osterfrieden) die bessere Strategie - Biber (und wenn sich einer mit Batchen auskennt, dann er) meint jedenfalls, ein Batch hätte auch Gefühle ...
Bevor ich mir das Ganze später genauer ansehe, ein Hinweis: Anstelle von "goto :1" und "goto :5" wäre jeweils "goto :eof" zu schreiben.

Grüße
bastla
Bitte warten ..
Mitglied: evotoy
04.04.2010 um 13:35 Uhr
oh ... kleiner tippfehler!! ich korrigier das mal - nich das die Batches eingeschnappt sind
Bitte warten ..
Mitglied: bastla
04.04.2010 um 15:11 Uhr
Hallo evotoy!

Hoffentlich zicken die jetzt nicht doch herum (getestet hab' ich nämlich nicht ):
01.
@echo off & setlocal & goto :Start 
02.
:2 
03.
set name=%name:_occlusion=-occlusion% 
04.
ren %1 "%Name:~-2%-%Name:~,-4%%~x1"  
05.
echo %1 "%Name:~-2%-%Name:~,-4%%~x1" 
06.
goto :eof 
07.
 
08.
:4 
09.
if not exist "%Name1:~3%" ( 
10.
    echo __________________________________________     
11.
    echo              Erstelle Ordner   : %Name1:~3%    
12.
    echo __________________________________________         
13.
    md "%Name1:~3%" 
14.
15.
move "%name1%%~x1" "%Name1:~3%\" 
16.
goto :eof 
17.
 
18.
 
19.
:Start 
20.
echo __________________________________________ 
21.
echo __________///  Umbenennen \\\_____________ 
22.
echo __________________________________________ 
23.
 
24.
set "MaskRename=*00??.*" 
25.
for /f "delims=" %%i in ('dir /b %MaskRename%') do set "Name=%%~ni" & call :2 "%%i" 
26.
 
27.
echo __________________________________________     
28.
echo Umbenennen beendet.    
29.
echo __________________________________________     
30.
echo\ 
31.
echo\ 
32.
echo __________________________________________ 
33.
echo ___________///  Sortieren \\\_____________ 
34.
echo __________________________________________ 
35.
 
36.
set "MaskSort=??-*.*" 
37.
for /F "delims=" %%i in ('dir/b %MaskSort%') do set "Name1=%%~ni" & call :4 "%%i" 
38.
 
39.
echo __________________________________________     
40.
echo Sortiervorgang beendet.     
41.
echo __________________________________________   
42.
pause
Die beiden Unterprogramm (hätte ich vielleicht nicht mit ":2" und ":4" benannt - sonst heißt es gleich wieder: "Ich bin nur eine Nummer für Dich - nicht mal die Mühe, mir einen Namen zu geben, hast Du Dir gemacht!" ) habe ich etwas prominenter am Anfang des Batches platziert - ob's der Performance hilft, musst Du selber beurteilen ...

Das "Ordner-Erstellen" ist jetzt etwas eingedampft, und die Unterdrückung der Fehler (mit "2>nul") beim Erstellen des Ordners bzw beim Verschieben habe ich entfernt - wenn es hier einen Fehler gibt, solltest Du den auch gemeldet bekommen.

Grüße
bastla
Bitte warten ..
Mitglied: evotoy
04.04.2010 um 21:02 Uhr
Danke!!! Das bau ich noch ein ...
Bitte warten ..
Mitglied: Biber
05.04.2010 um 01:29 Uhr
[OT]
Zitat von evotoy:
oh ... kleiner tippfehler!! ich korrigier das mal - nich das die Batches eingeschnappt sind
Danke, evotoy, fürs Korrigieren..
BTW, ich war ganz fest davon ausgegangen, dass der versehentlich vergessene Buchstabe ein "W" wäre und war total überrascht von einem "M".
Dachte, es ginge ums Zusammenbraten und nicht ums Zusammenwerfen...

Na egal.... alles bleibt gut...
Und ich wäre ja hier im Forum der Letzte, der irgendwelche ungelegten Haarspaltereien über den Zaun bricht...äh...oder so ähnlich.

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: evotoy
05.04.2010 um 19:45 Uhr
So ... vielen Dank nochmal!!

hier die finale version für alle, die ein ähnliches Problem plagt

01.
@echo off & setlocal & goto :Start 
02.
 
03.
:umbenennen 
04.
  set name=%name:_occlusion=-occlusion% 
05.
  ren %1 "%Name:~-2%-%Name:~,-4%%~x1"  
06.
  echo %1 "%Name:~-2%-%Name:~,-4%%~x1" 
07.
  goto :eof 
08.
 
09.
:sortieren 
10.
  if not exist "%Name1:~3%" ( 
11.
    echo    Erstelle Ordner   : %Name1:~3%    
12.
    md "%Name1:~3%" 
13.
14.
  move "%name1%%~x1" "%Name1:~3%\" 
15.
  goto :eof 
16.
 
17.
:checken 
18.
  if exist "%Name2:~,-10%" ( 
19.
    echo    gecheckt: %Name2:~,-10% 
20.
  ) ELSE ( 
21.
    echo ... 
22.
    echo !!! In der Benennung von "%Name2:~,-10%" und dem Pass ist ein Fehler !!! 
23.
    echo ...) 
24.
  goto :eof 
25.
 
26.
 
27.
:Start 
28.
  echo __________///  Umbenennen \\\_____________ 
29.
  echo ========================================== 
30.
 
31.
  set "MaskRename=*00??.*" 
32.
  for /f "delims=" %%i in ('dir /b %MaskRename%') do set "Name=%%~ni" & call :umbenennen "%%i" 
33.
 
34.
  echo __________________________________________     
35.
  echo :::::   Umbenennen beendet.    
36.
  echo\ 
37.
  echo\ 
38.
  echo ___________///  Sortieren \\\_____________ 
39.
  echo ========================================== 
40.
 
41.
  set "MaskSort=??-*.*" 
42.
  for /F "delims=" %%i in ('dir/b %MaskSort%') do set "Name1=%%~ni" & call :sortieren "%%i" 
43.
 
44.
  echo __________________________________________   
45.
  echo :::::   Sortieren beendet.     
46.
  echo\ 
47.
  echo\ 
48.
  echo ___________///  Checken \\\_______________ 
49.
  echo ========================================== 
50.
 
51.
  set "MaskCheck=*-occlusion" 
52.
  for /F "delims=" %%i in ('dir/b %MaskCheck%') do set "name2=%%i" & call :checken "%%i" 
53.
 
54.
  echo __________________________________________   
55.
  echo :::::   Checken beendet.   
56.
  
57.
pause
1. Dateien nach Muster umbenennen
2. Dateien in Ordner mit Teilen vom Dateinamen einsortieren
3. Erstellte Ordnernamen checken (da manuelle Benennung und per Batch generierte)

vg,
Bitte warten ..
Mitglied: bastla
06.04.2010 um 22:47 Uhr
Hallo evotoy!

Danke für den Abschluss des Threads - und Dein Batches sind jetzt, wo Du sie so schön herausgeputzt hast, sicherlich auch wieder versöhnt ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(3)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
gelöst CSV-Datei mit einem VBA Makro in Excel einlesen und leicht anpassen (5)

Frage von JoSiBa zum Thema Microsoft Office ...

Batch & Shell
gelöst Batch - Datei aus Ordner einlesen mit Ausnahmen! (4)

Frage von Daedrafaction zum Thema Batch & Shell ...

VB for Applications
gelöst Datei mit variablem Namen einlesen und als Excel speichern (1)

Frage von Anrion zum Thema VB for Applications ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...