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

Umbenennen mit Abfrage

Frage Entwicklung Batch & Shell

Mitglied: Spidi-25

Spidi-25 (Level 1) - Jetzt verbinden

11.09.2010, aktualisiert 18.10.2012, 3786 Aufrufe, 13 Kommentare

Hallo alle zusammen,

bin gerade am üben und verstehen von Batch´s

01.
@echo off 
02.
 
03.
FOR  %%i IN (*.mp3) DO ( 
04.
  echo Dateinamen %%i umbenennen? 
05.
set new= 
06.
set /p new= neuen Dateinamen bitte eingeben: 
07.
ren "%%i" "%new%" 
08.
)
was stimmt an meinem code nicht, ich bastle eine einfache Umbenennung mit Abfrage!

Grüße
Spidi-25
Mitglied: 60730
11.09.2010 um 23:54 Uhr
moin,

zum üben bitte die erste Zeile "wechlasern"

innerhalb von Schleifen gilt - die Variablen zuweisung klappert nicht ordentlich.
Dafür gibts delayed expansion und ! statt %.

btw:
echo Dateinamen %%i umbenennen?
Naja die Zeile ist zwar hübsch, anzusehen, aber wenn du kein
if not "!new!"=="" ren usw..
reinmontierst - nicht hübsch

Gruß
Bitte warten ..
Mitglied: Spidi-25
12.09.2010 um 02:00 Uhr
Hallo TimoBeil

danke für die Tips mit folgendem code

01.
@echo off & setlocal enableDelayedExpansion   
02.
for %%i in ("*.mp3") do ( 
03.
  echo Dateinamen %%i umbenennen? 
04.
     set "neu=" 
05.
set /p neu= neuen Dateinamen bitte eingeben: 
06.
ren "%%i" "!neu!" 
07.
08.
pause
wird umbenannt, aber die Dateiendung fehlt mir.

mit der Zeile kann ich noch nicht viel anfangen, bitte um Erläuterung.
if not "!new!"=="" ren usw..
Bitte warten ..
Mitglied: bastla
12.09.2010 um 02:28 Uhr
Hallo Spidi-25!
if not "!new!"=="" ren usw.
ist so zu verstehen, dass ein Umbenennen nur sinnvoll ist, wenn auch ein neuer Name eingegeben wurde bzw, dass eben keine Eingabe (= nur "Enter") bedeutet, dass der Name nicht geändert werden soll ...

Zusammen mit dem Beibehalten der Endung könnte die Zeile 6 dann so aussehen:
if not "!neu!"=="" ren "%%i" "!neu!.*"
Zu beachten wäre allerdings, dass bei "!" im Namen unerwünschte Effekte auftreten können und auch die Art der Schleife zu Überraschungen führen könnte - daher würde ich eher zur folgenden Variante greifen:
01.
@echo off & setlocal 
02.
for /f "delims=" %%i in ('dir /b *.mp3') do call :ProcessFile "%%i" 
03.
pause 
04.
goto :eof 
05.
 
06.
:ProcessFile 
07.
echo\ 
08.
set "neu=" 
09.
set /p neu=Neuen Dateinamen fuer %1 bitte eingeben:  
10.
if defined neu ren %1 "%neu%.*" 
11.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Friemler
12.09.2010 um 03:16 Uhr
Hallo bastla,

eine kleine Fehlerquelle bleibt bei Deinem Code: Wenn der Dateiname ein ^ (Carret) enthält, verdoppelt der Kommandointerpreter dieses Zeichen bei der Übergabe von %%i. Aus Ein^Test.mp3 wird also in ProcessFile Ein^^Test.mp3. Wenn der Dateiname ein % (Prozent) enthält, kommt es auch zu Fehlern. Deshalb würde ich es lieber so machen:
01.
@echo off & setlocal 
02.
for /f "delims=" %%i in ('dir /b *.mp3') do ( 
03.
  set "alt=%%i" 
04.
  call :ProcessFile 
05.
06.
pause 
07.
goto :eof 
08.
 
09.
:ProcessFile 
10.
set "neu=" 
11.
echo\ 
12.
set /p "neu=Neuen Dateinamen fuer %alt% bitte eingeben: " 
13.
if defined neu ren "%alt%" "%neu%.*" 
14.
goto :eof
Gruß
Friemler
Bitte warten ..
Mitglied: bastla
12.09.2010 um 09:00 Uhr
@Friemler
Stimmt - wobei ein Name wohl eher etwa "%20" enthält als dass er zB "(^_^).mp3" lautet ...

Eigentlich müsste auch noch der eingegebene neue Name geprüft werden - und dann wäre ich jedenfalls bei VBS angekommen ...

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
12.09.2010 um 10:51 Uhr
Hallo Spidi-25,

um deine vergessene Extension beim neuen Namen anzufügen kannst du diese Zeile :
If defined neu If /i "%neu:~-4%" NEQ ".mp3" set "neu=%neu%.mp3"
In Friemlers Code zwischen den Zeilen 12 und 13 einfügen.

Gruß
LotPings
Bitte warten ..
Mitglied: bastla
12.09.2010 um 11:39 Uhr
Hallo LotPings!
Dann wäre allerdings der Stern in Zeile 13 überflüssig (und eine Variable für die Extension sinnvoll) ...

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
12.09.2010 um 12:14 Uhr
Hast Recht, bastla,

hab ich übersehen.

Schönen Sonntag noch!

Gruß
LotPings
Bitte warten ..
Mitglied: Friemler
12.09.2010 um 12:49 Uhr
Hallo bastla,

VBS ist nicht unbedingt notwendig. Die Zeichen ^%& im neuen Dateinamen machen bei meinem Code sowieso keine Probleme. Allerdings dürfen ja die Zeichen
*?:<>|\/"
in Dateinamen nicht vorkommen. Deshalb hier noch eine Ergänzung, die darauf prüft:
01.
@echo off & setlocal 
02.
 
03.
for /f "delims=" %%i in ('dir /b *.mp3') do ( 
04.
  set "alt=%%i" 
05.
  call :ProcessFile 
06.
07.
pause 
08.
goto :eof 
09.
 
10.
 
11.
:ProcessFile 
12.
set "neu=" 
13.
echo\ 
14.
set /p "neu=Neuen Dateinamen fuer %alt% bitte eingeben: " 
15.
 
16.
if not defined neu goto :eof 
17.
 
18.
set "neu=%neu:"=*%" 
19.
for /f %%n in ('set /p "=%neu%" ^<NUL ^| findstr "[\*?:<>|\\/]"') do ( 
20.
  echo\ & echo Ein Dateiname darf keines der Zeichen *?^<^>^|\/:^" enthalten! & pause>NUL 
21.
  goto :ProcessFile 
22.
23.
 
24.
ren "%alt%" "%neu%.*" 
25.
goto :eof
Das separate Ersetzen von " durch * in Zeile 18 habe ich eingefügt, da es mir nicht möglich war, das Anführungszeichen in die Zeichenmenge von FINDSTR aufzunehmen, ohne das es zu irgendwelchen Fehlern bei problematischen Zeichen kam.

Gruß
Friemler
Bitte warten ..
Mitglied: Spidi-25
12.09.2010 um 13:11 Uhr
hallo zusammen und danke erstmals,

das wäre jetzt der code ob wohl ich noch nicht alle verstehe.

01.
@echo off & setlocal  
02.
for /f "delims=" %%i in ('dir /b *.mp3 *.wave') do (  
03.
  set "alt=%%i"  
04.
  call :ProcessFile  
05.
)  
06.
goto :eof  
07.
 
08.
:ProcessFile  
09.
set "neu="  
10.
echo\  
11.
set /p "neu=Neuen Dateinamen fuer %alt% bitte eingeben: " 
12.
If defined neu If /i "%neu:~-4%" NEQ ".*" set "neu=%neu%.*" 
13.
if defined neu ren "%alt%" "%neu%"   
14.
goto :eof
habe die Zeile 6 Pause entfernt, war nur für Übungszwecken gedacht.
in Zeile 12 habe ich .mp3 gegen .* getauscht da ein weiteres Format, ist das richtig so?

Kann man die Eingabe des neuen namens auch unterhalb der fuer bringen und zwar so

01.
Neuen Dateinamen fuer (Alter Name) bitte eingeben: 
02.
                      (Neuen Namen)

goto :eof
was bedeutet die zeile?

muss bei call :ProcessFile immer :ProcessFile drin stehen?

Könnte man die komplette Liste der Befehle von CMD.exe wie z.B. die For/? Erklärung Drucken?

Schönen Sonntag ebenfalls!

Grüße
Spidi-25
Bitte warten ..
Mitglied: Friemler
12.09.2010 um 13:49 Uhr
Hallo Spidi-25,

Zeile 12 kannst Du komplett rauswerfen, dann aber Zeile 13 wieder in
01.
if defined neu ren "%alt%" "%neu%.*"
ändern. Wenn Du in Zeile 12 auf .* prüfst, ist das sowieso falsch, da Du eine Datei nicht mit der Erweiterung * versehen kannst. Die korrigierte Zeile 13 bewirkt durch "%neu%.*", das der REN-Befehl die alte Dateierweiterung beibehält. Du könntest Zeile 11 in
01.
set /p "neu=Bitte neuen Dateinamen für %alt% ohne Erweiterung eingeben: "
ändern.

Zitat von Spidi-25:
goto :eof
was bedeutet die zeile?
Das bewirkt einen Rücksprung aus dem Unterprogramm bzw. ein Beenden des Skripts, wenn er im Hauptprogramm ausgeführt wird. EOF ist eine vordefinierte Sprungmarke von CMD.EXE, die nicht angegeben werden muss und immer am Ende des Skripts liegt (EOF=End Of File).

Zitat von Spidi-25:
muss bei call :ProcessFile immer :ProcessFile drin stehen?
Nein, Du kannst Deine Unterprogramme natürlich nennen wie Du willst. Nur der Doppelpunkt muss immer angegeben werden, da er eine Sprungmarke kennzeichnet. Der Befehl call ProcessFile würde nach einer Batchdatei namens ProcessFile suchen.

Zitat von Spidi-25:
Könnte man die komplette Liste der Befehle von CMD.exe wie z.B. die For/? Erklärung Drucken?
Ja, einfach
01.
for /? > ForHelp.txt
an der Kommandozeile eingeben. Dann wird die Hilfe von FOR in die Datei ForHelp.txt im aktuell gesetzten Verzeichnis geschrieben.

Übrigens: Der Befehl HELP gibt eine komplette Liste aller CMD-Befehle aus. Mit folgendem Skript kannst Du Dir die Hilfe zu allen CMD-Befehlen in die Datei Help.txt schreiben lassen. Die Datei wird allerdings im ASCII-Format (damit arbeitet CMD) geschrieben, Notepad (arbeitet im ANSI-Format) zeigt die Umlaute falsch an. Zum Schreiben/Betrachten von Batch-Skripten einen Editor verwenden, der im DOS-/ASCII-Format arbeitet. Zur Not EDIT, den alten DOS-Editor von Microsoft, der immer noch in Windows enthalten ist.
01.
@echo off 
02.
 
03.
setlocal 
04.
 
05.
for /f "skip=2" %%h in ('help ^| findstr /b "[A-Z]"') do ( 
06.
  call :ProcessCommand "%%h" 
07.
08.
 
09.
endlocal 
10.
exit /b 
11.
 
12.
 
13.
:ProcessCommand 
14.
  (echo *************** 
15.
   echo * %~1 
16.
   echo *************** 
17.
   %~1 /? 
18.
   echo. 
19.
   echo. 
20.
   echo.) >> Help.txt 
21.
exit /b
Schönen Sonntag ebenfalls!
Dito

Grüße
Friemler

PS:: Schau Dir auch nochmal mein zweites Skript weiter oben an.
Bitte warten ..
Mitglied: bastla
12.09.2010, aktualisiert 18.10.2012
Hallo Spidi-25!

Soferne das mit dem "Drucken" nicht ganz wörtlich gemeint war, sieh Dir mal die beiden folgenden Threads an:
http://www.administrator.de/wissen/cmd-befehle-auf-einen-blick-19802.ht ...
http://www.administrator.de/forum/wer-kann-mir-alle-batch-befele-zeigen ...
Hinsichtlich der Verwendung von 2 Zeilen für die Eingabe kannst Du das ja etwa so gestalten:
01.
echo Neuen Dateinamen fuer %alt% bitte eingeben: 
02.
set /p "neu=               " 
Grüße
bastla
Bitte warten ..
Mitglied: Spidi-25
12.09.2010 um 22:12 Uhr
Hallo

Passt Perfekt Danke!!!

Grüße
Spidi-25
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Datenbanken
gelöst Row Number bei einer Abfrage sinnvoll einsetzen (1)

Frage von Aximand zum Thema Datenbanken ...

Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Batch & Shell
Abfrage ob Datei von heute da ist (15)

Frage von pbelcl zum Thema Batch & Shell ...

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

Frage von patz223 zum Thema Windows Userverwaltung ...

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 ...