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
Kommentar vom Moderator Biber am 17.06.2010 um 21:04:09 Uhr
Zitat von any-key:
Batch Script - Dateien nach Namen in Ordner Sortieren und umbennen
Ich weiss nicht.... macht ihr das wirklich unabsichtllch?
Kann doch eigentlich nicht sein, dass es nie richtig geschrieben wird...
GELÖST

Batch Script - Dateien nach Namen in Ordner Sortieren und umbennen

Frage Entwicklung Batch & Shell

Mitglied: any-key

any-key (Level 1) - Jetzt verbinden

17.06.2010, aktualisiert 21:04 Uhr, 7843 Aufrufe, 6 Kommentare

Eine Liste von Bilddateien soll in eine vorgegeben Ordnerstruktur kopiert werden und dann umbenannt werden in Abhängigkeit vom Dateinamen.

Hallo Batch Scripter,

ich habe einige Bilddateien, die in eine vorgegebene Ordnerstruktur kopiert werden müssen.

Die Struktur sieht in etwa so aus:

Alter NameOrdner Neuer Name
Bild_A01f01d0.tifW A01Null - n00.tif
Bild_A01f01d1.tifW A01Eins - n00.tif
Bild_A01f02d0.tifW A02Null - n00.tif
Bild_A01f02d1.tifW A02Eins - n00.tif
Bild_A02f01d0.tifW B01Null - n00.tif
Bild_A02f01d1.tifW B01Eins - n00.tif
Bild_A02f02d0.tifW B02Null - n00.tif
Bild_A02f02d1.tifW B02Eins - n00.tif

Die Dateien Bild_A01.. A02..A03...liegen alle im gleichen Hauptordner und sollen dann abhängig vom Namen in den entsprechenden Unterordner kopiert werden.
Also z.B. A01f01 in Order "W A01" und A01f02 in "W A02", hingegen A02f02 in "W B02" oder A04f05 in Order "W D05".

Die entsprechenden Unterordner sind schon vorhanden und in diesen liegen bereits Bilder, die den neuen Namen tragen. Diese sollen gelöscht werden und die kopierten Bilder sollen deren Namen bekommen, der immer gleich ist, mit Ausnahme des Anfangs, der von der letzen Ziffer im alten Dateinamen abhängig ist. Die Ordennamen und Bildernamen reichen von "W A01" - "W A12" bis "W H01" - "W H12". Also insgesamt 96 Unterordner, wobei es nicht immer alle 96 gibt.

Ich habe leider keine Ahnung von shell-scripten und wäre für Hilfe sehr dankbar.

vielen Dank. any-key
Mitglied: bastla
17.06.2010 um 18:09 Uhr
Hallo any-key und willkommen im Forum!

Wenn ich die Struktur richtig interpretiere, sollte das etwa so zu machen sein (ungetestet):
01.
@echo off & setlocal 
02.
set "Hauptordner=D:\Bilder" 
03.
 
04.
set C=%temp%\ConvertFilename.vbs 
05.
>%C% echo D=WScript.Arguments(0):T=Array("Null","Eins"):B=Chr(CInt(Mid(D,7,2))+64):N=Mid(D,10,2):WScript.Echo "W "^&B^&N^&"_"^&T(Mid(D,13,1))^&" - n00.tif" 
06.
 
07.
pushd "%Hauptordner%" 
08.
for /f %%i in ('dir Bild_*.tif') do for /f "tokens=1-2 delims=_" %%a in ('cscript //nologo %C% %%i') do copy %%i "%%a\%%b" 
09.
popd
Grüße
bastla
Bitte warten ..
Mitglied: any-key
21.06.2010 um 19:23 Uhr
Hallo bastla,

danke erstmal fürs Willkommen heißen und noch viel mehr für Deinen Lösungsansatz.

Die Lösung sieht für mich als nicht-programmierer sehr elegant aus und hat mich einige Zeit gekostet zu durchblicken.
Leider bricht das Script mit der Fehlermeldung Type Mismatch: 'Cint' und Type Mismatch: 'Mid' in Zeile 1,47 bzw. Zeile 1,88 ab.
Wenn ich diese Fehlermeldung richtig verstehe, erkennt das Script keine Zahlen an diesen Positionen, die aber im Dateinamen da sind.

Noch eine vielleicht triviale Frage, aber wenn ich mir die Ausgabe vorher anschauen möchte, reicht es dann "copy" durch "echo" zu ersetzen oder wie würde man das realisieren?

tausend dank.

Grüße, any-key

PS: @Biber: Sorry für den Vertipper, kann man das noch ändern?
Bitte warten ..
Mitglied: Biber
21.06.2010 um 22:04 Uhr
Moin any-key,

Vertipper sind hier gern gesehene Mitglieder...

Grundsätzlich kann du immer hinterher den Beitrag (oder einen Kommentar) editieren, wenn du angemeldet bist und "Editieren" auswählst.
bei Tippfehlern, auf die schon jemand Bezug genommen hat, ist es in der Regel zu spät

A propos Tippfehler...

bastla hat die auch einen zum Debuggen überlassen... bei der DIR-Anweisung in Zeile 8 fehlt der Parameter /B.
Der bewirkt, dass nur die Pfad/Dateinamen vom DIR-Befehl angezeigt werden, nicht die Header ("Volume in Laufwerk D heißt..." und Zusammenfassung ("X Dateien in Y Verzeichnissen")

Wenn du mit em ECHO-Befehl ein "was-wäre-wenn" simulieren willst, dann wäre meine Empfehlung:

01.
:: bastlasFilesorter.cmd 
02.
@echo off & setlocal 
03.
set "Hauptordner=F:\Schnipsel" 
04.
 
05.
set C=%temp%\ConvertFilename.vbs 
06.
>%C% echo D=WScript.Arguments(0):T=Array("Null","Eins"):B=Chr(CInt(Mid(D,7,2))+64):N=Mid(D,10,2):WScript.Echo "W "^&B^&N^&"_"^&T(Mid(D,13,1))^&" - n00.tif" 
07.
 
08.
pushd "%Hauptordner%" 
09.
for /f %%i in ('dir /b Bild_*.tif') do ECHO for /f "tokens=1-2 delims=_" %%a in ('cscript //nologo %C% %%i') do ....nothing 
10.
for /f %%i in ('dir /b Bild_*.tif') do for /f "tokens=1-2 delims=_" %%a in ('cscript //nologo %C% %%i') do ECHO copy %%i "%%a\%%b" 
11.
 
12.
popd
--> So [mit den Codezeilen 08/09] lasse ich ZWEI FOR-Anweisungen, die bei bastla in EINER Zeile stehen, nacheinander anzeigen.
Eingefügt ist das GROSSgeschriebene ECHO.

Ausgabe bei mir wäre in etwa:
for /f "tokens=1-2 delims=_" %a in ('cscript //nologo C:\DOKUME~1\Biber\LOKALE~1\Temp\ConvertFilename.vbs Bild_A01f01d1.tif') do ....nothing 
for /f "tokens=1-2 delims=_" %a in ('cscript //nologo C:\DOKUME~1\Biber\LOKALE~1\Temp\ConvertFilename.vbs Bild_A02f02d1.tif') do ....nothing 
for /f "tokens=1-2 delims=_" %a in ('cscript //nologo C:\DOKUME~1\Biber\LOKALE~1\Temp\ConvertFilename.vbs Bild_A02f02d0.tif') do ....nothing 
copy Bild_A01f01d1.tif "W A01\Eins - n00.tif" 
copy Bild_A02f02d1.tif "W B02\Eins - n00.tif" 
copy Bild_A02f02d0.tif "W B02\Null - n00.tif"
... bei den drei Testdateien, die ich mir angelegt habe.

Nähere Details kommen ggf. von bastla (falls er mich noch nicht überholt hat)

Grüße
Biber
Bitte warten ..
Mitglied: bastla
21.06.2010 um 22:05 Uhr
Hallo any-key!

Ich hatte zum Testen Deine Beispiele verwendet und die gewünschten Ergebnisse erhalten - direkt von der Kommandozeile nachzuvollziehen mit
D:\>for %i in (Bild_A01f01d0.tif Bild_A01f01d1.tif Bild_A01f02d0.tif Bild_A01f02d1.tif Bild_A02f01d0.tif Bild_A02f01d1.tif Bild_A02f02d0.tif Bild_A02f02d1.tif) do @cscript //nologo %temp%\ConvertFilename.vbs %i 
W A01_Null - n00.tif 
W A01_Eins - n00.tif 
W A02_Null - n00.tif 
W A02_Eins - n00.tif 
W B01_Null - n00.tif 
W B01_Eins - n00.tif 
W B02_Null - n00.tif 
W B02_Eins - n00.tif
Wie Du sicher schon den "Mid"-Teilen entnommen hast, werden die Zeichen 7 und 8 zum Buchstaben umgewandelt, 10 und 11 unverändert übernommen und aus der Ziffer auf Position 13 der Text "Null" oder "Eins" gemacht ...
wenn ich mir die Ausgabe vorher anschauen möchte, reicht es dann "copy" durch "echo" zu ersetzen
Ja, Du kannst aber auch einfach das "echo" unmittelbar vor "copy" schreiben ...

Wenn Du beim Start des Batches (im Beispiel in der Datei "D:\Kopieren.cmd" gespeichert) noch eine Umleitung der Ausgabe anfügst - etwa:
D:\Kopieren.cmd > D:\Ausgabe.txt
kannst Du danach die gesamte Ausgabe per Editor (oder zB Import in Excel) in Augenschein nehmen ...

Grüße
bastla

[Edit] @Biber
Als ob ich Dich schon jemals überholt hätte ...

Danke für's genaue Hinschauen - ich hatte mich leider nur auf die Zerlegung und daher das VBScript konzentriert ...
[/Edit]
Bitte warten ..
Mitglied: any-key
22.06.2010 um 14:05 Uhr
Hey Biber und bastla,

ihr seid großartig. Das klappt wunderbar und mit dem Gerüst kann ich dann die Feinheiten für mein spezielles Problem ausarbeiten.

Ganz lieben dank und alles Gute!

any-key
Bitte warten ..
Mitglied: bastla
22.06.2010 um 14:16 Uhr
Hallo any-key!

Schön, dass es für Dich passt.

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

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...