Top-Themen

Aktuelle Themen (A bis Z)

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 Fehlersuche in Batch zur Datei-Umbenennung

Mitglied: IrieDaily

IrieDaily (Level 1) - Jetzt verbinden

11.02.2007, aktualisiert 12.02.2007, 4888 Aufrufe, 17 Kommentare

Übergabe des Dateinamens an das Unterprogramm?

Hallo zusammen,

ich möchte mit Hilfe eines Batchs mehrere Dateien (in diesem Fall JPG's) umbenennen, genauer gesagt nummerieren. Was ich mir bisher zusammengeschustert habe, seht ihr unten. Mein Problem: "Das System kann die angegebene Datei nicht finden." Wie kann dem Abhilfe geschaffen werden?

@echo off
set /a counter=1
for %%f in (*.jpg) do call :check
goto :print

:check
ren %%f %counter%".jpg"
set /a counter+=1
goto :end

:print
set /a counter-=1
echo %counter% Dateien umbenannt.
goto :end

:end

Vielen Dank im Voraus!

Schöne Grüße, IrieDaily
Mitglied: Dani
11.02.2007 um 23:19 Uhr
G' Abend,
also das kann gar nicht gehen. Die Schleife ist falsch konstruiert.

Ich habe den Batch mal optimiert!! Die Verbesserungen von "bastla" (siehe unten) wurden bereits von mir implementiert. Thx...
01.
@echo off & Setlocal EnableDelayedExpansion
02.

03.
set counter=1
04.
set src_dir=C:\test
05.
set file_type=txt
06.

07.
for /f "delims=" %%a in ('dir /b "%src_dir%\*.%file_type%"') do (
08.
    ren "%src_dir%\%%a" "Bild!counter!.%file_type%"
09.
    set /a counter+=1
10.
)
11.
set /a counter-=1
12.
echo %counter% Dateien umbenannt.
Nennt alle Dateien mit der Endung "jpg" um. Sprich du musst legendlich den Pfad in der Variable "src_dir" ändern. Die Bilder werden in Bildxx.jpg umbenannt. Der Zähler liefert so auch das richtige Ergebnis. Viel Spaß damit...


Gruß
Dani
Bitte warten ..
Mitglied: bastla
11.02.2007 um 23:28 Uhr
Hallo IrieDaily und willkommen im Forum!

Beim Aufruf mit "call" verhält sich das aufgerufene Unterprogramm wie ein neuer Batch, daher sind bei Bedarf Argumente zu übergeben und im Unterprogramm wie üblich mit %1, %2, ... anzusprechen. Es sollte daher so gehen:
01.
@echo off
02.
set /a counter=1
03.
for %%f in (*.jpg) do call :check "%%f"
04.
goto :print
05.

06.
:check
07.
ren %1 "%counter%.jpg"
08.
set /a counter+=1
09.
goto :end
10.

11.
:print
12.
set /a counter-=1
13.
echo %counter% Dateien umbenannt.
14.
goto :end
15.

16.
:end
Als Alternative könntest Du vielleicht noch den Counter auf zB 10001 setzen und beim Umbenennen durch Verwendung von "%counter:~1%.jpg" einen Dateinamen der Form "0001.jpg" (also mit führenden Nullen) erhalten (:~1 sorgt für das Weglassen der ersten Stelle, würde also bei einem Startwert von zB 1001 genauso funktionieren).

Und willst Du die Dateien nach dem Datum sortiert, so würde die "for"-Zeile etwa so aussehen:
01.
for "delims=" %%f in ('dir /b /od /a-d *.jpg') do call check "%%f"
Übersetzung: Zeige die Namen aller *.jpg-Dateien (aber keine Ordner - nur zur Sicherheit) nach Datum aufsteigend sortiert (älteste zuerst) an und bearbeite jede einzelne Datei mit dem Unterprogramm "check", wobei enthaltene Leerzeichen mit übergeben werden.

Grüße
bastla
Bitte warten ..
Mitglied: bastla
11.02.2007 um 23:30 Uhr
@Dani

Warst Du also wieder einmal schneller - und dabei hast Du noch zweimal "set " zuviel geschrieben (kopiert) ...

Grüße
bastla
Bitte warten ..
Mitglied: Dani
11.02.2007 um 23:40 Uhr
Abend bastla,
wo habe ich 2 "set" zu viel?! Passt doch so...oder hab ich wieder mal ein Tief?


Gruß
Dani
Bitte warten ..
Mitglied: bastla
11.02.2007 um 23:44 Uhr
@Dani

Bei Verwendung des %file_type% hattest Du das "set " vorneweg mitkopiert.
Das "/a" beim "set Counter+=1" wäre auch noch nachzutragen.

Grüße
bastla
Bitte warten ..
Mitglied: Dani
11.02.2007 um 23:48 Uhr
Oha...stimmt. Warum erkennt mein copy & paste das nicht?? => blödes Windows.
Warum brauche ich das /a. Geht doch auch ohne, oder??


Gruß
Dani
Bitte warten ..
Mitglied: bastla
11.02.2007 um 23:55 Uhr
@Dani

Warum brauche ich das /a. Geht doch auch ohne, oder??
Das Weiterzählen fällt unter "artihmetische Operation" - bei mir geht's nicht ohne.

Grüße
bastla
Bitte warten ..
Mitglied: Dani
12.02.2007 um 00:12 Uhr
Schon komisch....also irgendwie hat meine Konsole was an der Waffel. Vorher gings....gerade eben wieder nicht.
Ich habe meine Version auf den Stand "Final" gebracht. Eigentlich ist es jetzt dein Entwurf!
thx...


Gruß
Dani
Bitte warten ..
Mitglied: bastla
12.02.2007 um 00:19 Uhr
@Dani

Ich würd's als per Teamwork verbesserten Entwurf von IrieDaily betrachten ...

Gute Nacht
bastla
Bitte warten ..
Mitglied: Biber
12.02.2007 um 00:29 Uhr
Kleinere Verbesserungsvorschläge hätte ich auch noch (wenn ich auch ein "bisschen optimieren" darf) ...*gg

for "delims=" %%f in ('dir /b /od /a-d *.jpg') do call check "%%f"
Hier würde ein Doppelpunkt vor vor dem "check" lästige Fehlermeldungen vermeiden.

Die Skizze darüber etwas eingedampft sieht so aus:
01.
@echo off <b>& setlocal</b>
02.
set /a counter=0
03.
for %%f in (*.jpg) do call :check "%%f"
04.
echo %counter% Dateien umbenannt.
05.
goto :eof
06.

07.
:check
08.
set /a counter+=1
09.
ren %1 "%counter%.jpg"
-bzw- mit den neuen Namen in einheitlicher Länge:
01.
@echo off <b>& setlocal</b>
02.
set /a counter=90000
03.
REM In der Wildcard-Angabe steht jetzt *.jpg...
04.
for %%f in (*.jpg) do call :check "%%f"
05.
Set /a counter-=90000
06.
echo %counter% Dateien umbenannt.
07.
goto :eof
08.

09.
:check
10.
set /a counter+=1
11.
REM ...dafür steht hier jetzt nicht mehr fest verdrahtet *.jpg.. 
12.
REM nur eine Stelle im Code zu ändern, wenn mal was anderes umbenannt werden soll
13.
ren %1 "%counter:~1%.%~x1"
Und das ganze mit "EnableDelayedExpansion":
01.
@echo off <b>& setlocal EnableDelayedExpansion</b>
02.
set /a counter=90000
03.
for %%f in (*.jpg) do Set /a "counter+=1" & ren "%%f" "!counter:~1!.jpg"
04.
echo %counter% Dateien umbenannt.
Gruss
Biber
Bitte warten ..
Mitglied: bastla
12.02.2007 um 00:36 Uhr
@Biber

Was bringen mir eigentlich hier:
ren "%1" "%counter:~1%.jpg"
die Anführungszeichen bei %1?

Grüße
bastla
Bitte warten ..
Mitglied: Biber
12.02.2007 um 00:41 Uhr
@bastla
Was bringen mir hier...
Nichts, die hatte ich auch gesehen und wieder rauskorrigiert, bevor ich Deinen letzten Kommentar gelesen hatte.

[Konnte ja nicht ahnen, dass Du so schnell hier bist..*gg]

Grüsse
Biber
Bitte warten ..
Mitglied: bastla
12.02.2007 um 00:49 Uhr
@Biber

Eigentlich wollte ich auch nur ganz kurz bleiben (wie Du an den unterlassenen Optimierungen / kosmetischen Operationen oben bemerken kannst), aber wie's halt manchmal kommt ... Lass Dich aber nur nicht stören.

Grüße
bastla
Bitte warten ..
Mitglied: IrieDaily
12.02.2007 um 09:52 Uhr
Wow, ihr seid ja fleißig - vielen Dank für die prompten und hilfreichen Antworten!

Ich muss dazu sagen, dass ich absoluter Neuling in diesem Gebiet bin und nur die ganz simplen Befehle verstehe. Deshalb ist mir bastlas erste Änderung meines Entwurfes sehr sympathisch. Danis Skript funktioniert mit Sicherheit ebenso gut, jedoch habe ich das Problem, die Hälfte nicht zu verstehen. Und sowas wurmt mich immer...

Nun zu den Dingen, die ich nicht verstehe. Habt ihr Lust, sie mir hier kurz zu erklären oder habt ihr vielleicht einen Link parat, unter dem ich das nachlesen könnte? Auf den Seiten, die ich bisher durchstöbert habe, war das Niveau meist entweder zu grundlegend oder gleich über meinen Kapazitäten.

Schönen Gruß, IrieDaily

P.S. Bibers Skripte sind natürlich auch toll, um niemanden zu vergessen
Bitte warten ..
Mitglied: Biber
12.02.2007 um 13:43 Uhr
Moin IrieDaily,

Habt ihr Lust, sie mir hier kurz zu erklären ...

Jein....also konkrete Fragen schon. Selbstverständlich.
Aber ich wäre dankbar dafür, wenn wir als Kompromiss die Regelung hätten:

-> Du schaust am CMD-Prompt mit "CALL /?", "goto /?" , "CMD /?" die nachlesbaren M$-Hilfen und Beispiele an (die sind wirklich nicht schlecht oder unvollständig).
-> was dann noch unklar ist, können und werden wir gerne beantworten

Nur aus jedem Gebrauchsschnipsel ein Tutorial machen, dass sprengt unseren Rahmen.
Da bitte ich um Dein Verständnis.

Gibt es denn konkrete Stellen in den Beispielskripts oben, die Du nicht verstehst?

Gruss Biber
Bitte warten ..
Mitglied: IrieDaily
12.02.2007 um 18:55 Uhr
Guten Abend,

da ich heute leider wenig Zeit habe, hätte ich noch eine prinzipielle Frage, bevor ich die Microsoft-Hilfen durcharbeite und gegebenenfalls noch einmal nachfrage.

Wie kann man einen Ausgabewert an eine Variable übergeben?

Mit Ausgabewert meine ich eine Zahl, welche zuvor durch ein kleines Programm ermittelt und ausgegeben wird. Genauer gesagt geht es um das Tool "identify" aus dem Paket ImageMagick. Damit ermittle ich bspw. die Breite eines Fotos, und das Ergebnis soll dann an eine Variable übergeben werden. Auf den Befehl identify -format "%w" 1.jpg erhalte ich z.B. den Wert 1752. Diesen Wert hätte ich nun gerne in einer Variable "width". Wie ist sowas machbar?

Vielen Dank schonmal, und bitte entschuldigt die Abschweifung vom ursprünglichen Thema!

Gruß, IrieDaily
Bitte warten ..
Mitglied: bastla
12.02.2007 um 19:14 Uhr
Hallo IrieDaily!

Wie Du richtig erkannst hast, wäre Deine Frage eigentlich Gegenstand eines neuen Themas ...

However - falls das Tool nur einen Rückgabewert wie beschrieben liefert:
01.
for /f %%i in ('identify -format "%w" 1.jpg') do set width=%%i
Ansonsten müsstest Du über "tokens" den gesuchten Teil aus dem Rückgabetext herausfiltern.

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Komplexe Umbenennung mit Variabler Zeichenlänge mittels Batch

gelöst Frage von parteyspeakaBatch & Shell2 Kommentare

Hallo Zusammen, ich habe mal wieder den Weg zu euch gefunden da mitlesen mal nicht mehr reichte. Wir haben ...

Batch & Shell

Umbenennung per Skript

gelöst Frage von DerWoWussteBatch & Shell9 Kommentare

Moin Kollegen, habe bei der Suche nichts passendes gefunden, auf die Schnelle. Kann mir jemand ein paar Codezeilen spenden, ...

Batch & Shell

BATCH ini Datei Datei auslesen

gelöst Frage von Juergen42Batch & Shell2 Kommentare

Hallo zusammen, ich möchte eine ini Datei auslesen mit folgenden Aufbau INHALT DER INI ID=30 NAME="test1" PFAD="K:\Kontoauszug\Test1\*.pdf" PFAD_S="K:\Kontoauszug\Test1\Sicherung\" ID=28 ...

Batch & Shell

Batch Datei Ordnerüberwachung

Frage von Phant0xBatch & Shell1 Kommentar

Hallo zusammen, könntet ihr mir helfen eine Batch Datei zu schreiben, die einen bestimmten Ordner kontrolliert, ob sich Dateien ...

Neue Wissensbeiträge
Datenschutz

SiSyPHuS Win10: Analyse der Telemetriekomponenten in Windows 10

Tipp von freesolo vor 3 TagenDatenschutz1 Kommentar

Alle die sich detailliert für die Datensammlung interessieren die unter Windows 10 stattfindet, sollten sich folgende Analyse des BSI ...

Sicherheit
Adminrechte dank Intel-Grafikkarte
Information von DerWoWusste vor 3 TagenSicherheit2 Kommentare

ist das Advisory, welches beschreibt, welche Intel HD Graphics Modelle Sicherheitslücken haben, mit denen sich schwache Nutzer zu Admins ...

Internet

EU Urheberrechtsreform: Eingriff in die Internetkultur

Information von Frank vor 4 TagenInternet1 Kommentar

Liebe Besucherin, lieber Besucher, warum erscheint das obere Banner in allen Beiträgen? Aus Protest gegen Teile der geplanten EU-Urheberrechtsreform ...

Windows Server
Windows Backup - FilterManager Event 3
Tipp von NixVerstehen vor 4 TagenWindows Server

Hallo zusammen, ich bin kein gelernter ITler und auch beruflich nicht in dem Feld tätig. Wir setzen in unserem ...

Heiß diskutierte Inhalte
DNS
50 EUR für Telekom-, Unitymedia- und Vodafone-Kunden
Frage von Zorro1199DNS14 Kommentare

Hallo zusammen, wie evaluieren gerade das korrekte Einhalten von DNS-TTLs durch verschiedene Provider. Aktuell suchen wir noch Kunden der ...

Windows Server
Sonntagsfrage: Welchen Sinn seht Ihr noch im Server 2019 Essentials
Frage von ashnodWindows Server13 Kommentare

Guten Morgen, ich habe gestern den Windows Server 2019 Essentials als Trial in einer VM installiert um mir das ...

Windows Server
Windows 2012 R2 - Skript um Druckerkonfiguration auszulesen und zu setzen
gelöst Frage von Der-PhilWindows Server11 Kommentare

Hallo! Kennt ihr eine Möglichkeit, per Skript die Konfiguration eines Druckers auszulesen und auf einen anderen anzuwenden? Hintergrund: Ich ...

Grafik
Viele Fotos organisieren - Windows Dateisystem zu lahm bzw. überfordert
Frage von augustaparkGrafik11 Kommentare

Hallo und Guten Morgen, hat einer eine Idee, wie man viele Fotos sinnvoll und effizient organisieren kann? Wir haben ...