Hi allseits,
wie per PM mit nihil besprochen poste ich hier das Endresultat der gemeinsamen Bemühungen, damit die Community auch was davon hat.
Die Batch macht was verlangt wurde (Achtung: filespec ist jetzt *,.*, nicht mehr *.mp3), und wurde unter Windows 8 getestet. Ich mache mir aus Zeitgründen nicht die Mühe herauszufinden, warum genau die erste Version der Batch unter Windows 7 nicht auf Anhieb lief, und da ich es nicht lassen konnte, an der einen doer anderen Stelle noch eine kleine Verhübschung einzubauen kann ich nicht mehr genau sagen, welche Änderung genau den Durchbruch brachte. Möglicherweise bracht auch das Übermitteln der Batch per Mail statt hier über das Foum den Durchbruch - Batches werden wegen ihrer Sonderzeichen von Webobderflächen manchmal nur verstümmelt wiedergegeben.
Hier also der fertige Code.
@if „%DEBUG%“=="" Echo off
Set FileSpec=*.*
Rem Kommandozeilenparameter übernehmen
Set _Source=%1
Rem Kommandozeilenhilfe (/?)
if „%_Source%“=="/?" Goto DisplayHelp
if „%_Source%“=="?" Goto DisplayHelp
Rem Wenn Source nicht angegeben, aktuelles Verzeichnis nehmen
If „%_Source%“=="" Set _Source=%CD%
Rem ggf. Hochkomma entfernen
Set _Source=%_Source:"=%
Rem ggf. trailing Backslash entfernen
Set _Test=%_Source:~-1%
If „%_Test%“=="" Set _Source=%_Source:~0,-1%
Hello
Rem Benutzer gebuehrend begruessen
Echo -----------------------------------
Echo renfiles.bat V0.2 ©2014 by Nimral
Echo -----------------------------------
Echo.
Echo Mein Verzeichnis: %CD%
Echo Quellverzeichnis: %_Source%%FileSpec%
Echo.
Echo Druecke Strg-C fuer Abbruch, Eingabetaste fuer los gehts.
Echo.
Pause
Losgehts
REM Trailing Backslashes entfernen
If „%_Source:~-1“=="" Set _Source=%_Source:~0,-1%
REM Verzeichnisse prüfen
If not Exist „%_Source%.“ Goto :Error „Fehler: Quellverzeichnis %_Source% nicht gefunden!“
REM und jetzt gehts los …
For /F „tokens=*“ %%d in (‚dir %_Source% /A:d /B‘) do Call
rocessTree „%_Source%%%d“ „%%d“
Goto Finish
ProcessTree
Set _Directoryname=%1
Set _Directoryname=%_Directoryname:"=%
Set _Prefix=%2
Set _Prefix=%_Prefix:"=%
Echo ProcessTree: %_DirectoryName%
Rem die Dateien beackern if Exist %_DirectoryName%%FileSpec%
For /F „tokens=*“ %%f in (‚dir %_DirectoryName%%FileSpec% /A:-d /B‘) do Call :Rename1File „%_Directoryname%%%f“ „%_Source%%_Prefix%~%%f“
Rem Rekursion in die Unterverzeichnisse
For /F „tokens=*“ %%d in (‚dir %_DirectoryName% /A:d /B‘) do Call
rocessTree „%_DirectoryName%%%d“ „%_Prefix%~%%d“
Goto :EOF
Rename1File
Set _SourceFileName=%1
Set _SourceFileName=%_SourceFileName:"=%
Set _TargetFileName=%2
Set _TargetFileName=%_TargetFileName:"=%
Rem Wenn Source nicht angegeben, aktuelles Verzeichnis nehmen
If „%_Source%“=="" Set _Source=%CD%Echo Rename1File: %_SourceFileName% – %_TargetFileName%
If „%DRYRUN%“=="" move „%_SourceFileName%“ „%_TargetFileName%“
goto :EOF
Error
Echo. Echo Programmabbruch wegen eines furchtbar schweren Fehlers
Echo.
Set _Error=%1
Set _Error=%_Error:"=%
Echo %_Error%
Echo.
Pause
Goto Finish
DisplayHelp
REM Kommandozeilenhilfe (/?)
Echo.
Echo Aufrufparameter
Echo ---------------
Echo renfiles [„Zielverzeichnis“]
Echo.
Echo Anmerkungen:
Echo ------------
Echo „“ koennen weggelassen werden, wenn kein Leerzeichen im Verzeichnisnamen vorkommt
Echo Default fuer Zielverzeichnis ist das aktuelle Verzeichnis
echo.
Pause
Goto Finish
Finish
Echo Programmende (%ERRORLEVEL%).
Wer damit Probleme hat kann sich gerne per PM bei mir eine „unverwebte“ Vversion anfordern.
Ich rate übrigens vor einem test mit realen Daten -wegen der großen Schäden die ein fehllaufender Automat anrichten kann, dringend dazu, in einer DOS-Box (Kommandozeile) oder gerne auch üner die Windows EInstellungen (Computereigenschaften - Umgebungsvariablen) den Schalter
Set DRYRUN=1
zu setzen, und erst dann die Batch zu starten (ggf. aus der gleichen kommandozeile wie den SET Befehl) dann wird erst mal nichts verändert und man kann an Hand der bildschirmanzeigen in etwa sehen was die Batch tun wird.
Set DRYRUN=
oder einfach eine ander Kommandozeile öffen löscht den Schalter wieder, und beim nächsten Aufruf macht die Batch dann Ernst.
Auch ein Aufruf mit /? ist angeraten, dann wird die Aufrufsyntax ausgegeben.
Sie läuft nun auch per Doppelklick von der GUI aus, die umbenannten Dateien landen dann im gleichen Verzeichnis, in dem sich auch die Batch befindet.
Have Fun
Armin.