Batch - Mysteriöses FOR

Von: , Frage gestellt am Sa, 11. Nov 2006

Hi,

also ich wollte per Batch Dateien so umbenennen, dass vorne dran noch etwas steht, also z.B. aus BLA1234.txt soll beispielBLA1234.txt werden.

Eigentlich habe ich dass auch schon geschrieben, nur funktionierts nicht.


rem Also der String der angehängt werden soll
set string=Amelie -


rem die blöde for-Schleife die für jedes einzelne mp3 die
rem rename-unterfunktion ("tren") aufruft
for %%i in (*.mp3) do (
set name=%%i
call:tren
)

rem sind alle Elemente umbenannt soll die Batch beendet werden
goto:eof


rem Zielname basteln; Ausgabe in Log; die Umbenennung an sich
:tren
set name2=%string%%name%
echo "%name%" "%name2%" >> log.txt
ren "%name%" "%name2%"

rem Rücksprung in die for Schleife
goto:eof



erzeugt komischerweise die Ausgabe:

"01 - J'y suis jamais all‚.mp3" "Amelie - 01 - J'y suis jamais all‚.mp3" 
[...]
"20 - La valse des monstres.mp3" "Amelie - 20 - La valse des monstres.mp3" 
"Amelie - 01 - J'y suis jamais all‚.mp3" "Amelie - Amelie - 01 - J'y suis jamais all‚.mp3"  (SIC !)


Also die erste Datei wird zweimal umbenannt. Warum?!?!

mfg
Matze

15 Antworten zu dieser Frage

    • Antwort von nach 14 Stunden 0 hilfreich
      Re^2: Batch - Mysteriöses FOR

      Hi Erwin, ich weiss, du wolltest eher eine antwort auf deine frage. aber
      den fehler zu suchen ist mühsam und das obige programm ist
      wirklich praktisch.
      Ja hast Recht..! ;-) aber das Programm kenn ich und ist auch sehr gut, aber ich will ja grade sowas selber schreiben (hat meinen Ehrgeiz geweckt...)

      mfg
      Matze

  1. Antwort von nach 6 Stunden 0 hilfreich
    Batch - Mysteriöser GOTO

    Moin, matze,

    lass den goto:eof weg, dann geht alles wie von selbst. help call erklärt, was der goto vermurkst. Sieht aus, als hättest Du etwas gestrickt, das entfernt an eine rekursive Prozedur erinnert.

    Gruß Ralf

    • Antwort von nach 13 Stunden 0 hilfreich
      Re: Batch - Mysteriöser GOTO

      Hi Drambeldier,

      ja? gib du mal help goto ein ;-) okay ich habe auch nicht erwähnt, dass es Windows XP (SP2 falls das was ausmacht).


      Also wie das funktioniert ist n bisschen blöd zu erklären:
      Im Endeffekt führt der Aufruf von der Unterfunktion, dazu, dass

      -nochmal die komplette Batch aufgerufen wird
      -aber direkt an das Label der "Unterfunktion" gesprungen wird

      -> Deswegen, dass die Unterfunktion wirklich unabhängig wird muss man zu :eof springen, ein Label standardmäßig vorgesehen bei win XP für jede Batch.


      Was ganz nett ist, du kannst so einer Prozedur auch Variablen übergeben (%1 %2.... wie bei normaler Batch)


      Habe mir da auch einen "length"-Befehl gebastelt, der die Länge einer Variablen zurückgibt.

      rem länge eines variable zurückgeben
      :length
      set name=%1
      set wstr=!%name%!
      set /a %name%l=0
      :sub
      if "!wstr!"=="" goto endsub
      set wstr=!wstr:~0,-1!
      set /a %name%l=!%name%l!+1
      goto sub
      :endsub
      goto:eof
      


      Leider gibts keine Funktionen, aber ich habs so gelöst:
      nach dem Aufruf von length x wird die Länge des Strings x in der Variablen xl gespeichert.

      Mfg
      Matze

      • Antwort von nach 13 Stunden 0 hilfreich
        Re^2: Batch - Mysteriöser GOTO

        Hi Matze, ja? gib du mal help goto ein ;-)
        Verzeihung, ich dachte, Du wolltest etwas wissen. okay ich habe auch nicht
        erwähnt, dass es Windows XP (SP2 falls das was ausmacht).
        Das hat beides keinen EInfluss auf die Ausführung von Batchdateien. Also wie das funktioniert ist n bisschen blöd zu erklären:
        Danke, ich hatte keine Frage gestellt.

        Gruß Ralf

        • Antwort von nach 14 Stunden 0 hilfreich
          (ot) Batch - Mysteriöser GOTO

          Hi, ja? gib du mal help goto ein ;-)
          Verzeihung, ich dachte, Du wolltest etwas wissen.
          Also irgendwie finde ich diese Reaktion etwas seltsam, ich hab gedacht dich könnte es interessieren, da du mit deinem Titel für mich eine indirekte Frage gestellt hast.

          Okok du bist Diplom-Informatiker, sorry dass ich deine Vika nicht gelesen habe, aber etwas netter hättest trotzdem reagieren können. (Du hasts wahrscheinlich nicht mal durchgelesen.)

          Bevor ich jetzt noch erkläre, dass ein Strichpunkt gefolgt von einem Bindestrich und einer schliessenden Klammer ein Hinweis darauf sein könnte, dass man den vorhergehendem Text nicht allzuernst nehmen sollte, verbleibe ich mit freundlichen Grüßen

          Matze

          • Antwort von nach einem Tag 0 hilfreich
            [ot] Umziehen ins Plauderbrett?

            Moin, Matze,

            ich habe keine Frage gestellt, noch nicht mal indirekt, sondern Dir einen Tipp gegeben. Nach meiner Methode (ohne diesen kruden Goto) funktioniert das Ganze jedenfalls.

            Wenn ich Fragen beantworte, so interessieren mich Alternativen nur dann, wenn meine Lösung nicht klappt. Zum Plaudern über mögliche unterschiedliche Welten habe ich einfach nicht die Zeit.

            Gruß Ralf

        • Antwort von nach 14 Stunden 0 hilfreich
          Info

          [...]
          Der GOTO-Befehl untersttzt jetzt die Marke :EOF. Dadurch wird die Bearbeitung
          am Ende der aktuellen Batchdatei fortgesetzt. Das ist eine einfache
          M”glichkeit, eine Batchdatei zu beenden, ohne ein Sprungziel zu definieren.
          Geben Sie CALL /? ein, um weitere Informationen ber die Erweiterungen des
          CALL-Befehls zu erhalten.

  2. Antwort von nach 14 Stunden 0 hilfreich
    Re: Batch - Mysteriöses FOR

    also ich wollte per Batch Dateien so umbenennen, dass vorne
    dran noch etwas steht, also z.B. aus BLA1234.txt soll
    beispielBLA1234.txt werden.
    Hi Matze,

    for %%a in (*.mp3) do rename %%a beispiel%%a

    Gruß
    Reinhard



Keine passende Antwort gefunden? Jetzt eigene Frage stellen!