1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Batch-Programmierung mit Schleife

Discussion in 'Programmieren' started by sonderbar, Aug 27, 2010.

Thread Status:
Not open for further replies.
  1. sonderbar

    sonderbar Byte

    Ich habe folgendes Batch-Programm geschrieben:
    Code:
    set linksa=_L.JPG
    set rechtsa=_R.JPG
    FOR /F %%i IN ('dir /b /s *.mpo') DO (
     "%~dp0\MPO2Stereo.exe" "%%i"
     set alt=%%i
     set neu=%alt:~0,-4%
     echo %alt%
     echo %neu%
     "c:\Program Files (x86)\IrfanView\i_view32.exe" "%neu%%linksa%" /resize_long=800 /aspectratio /resample /convert="%neu%%linksa%"
     "c:\Program Files (x86)\IrfanView\i_view32.exe" "%neu%%rechtsa%" /resize_long=800 /aspectratio /resample /convert="%neu%%rechtsa%"
     "%~dp0\jpg2jps.exe" "%%i" -delete
    )
    Leider verhält sich das Programm nicht wie gewünscht. Manchmal spinnt es sogar. echo %neu% gibt manchmal nur ~0,-4 aus.
    Wenn es aber mal geht, dann steht in alt immer der Dateiname der letzten Datei drin. Ich brauche natürlich dort immer die aktuelle Datei.
    Nun steht in help set, dass dies normal ist, und das man ! statt % benutzen muss. Mir ist jedoch nicht klar, an welcher Stelle man hier ! statt % nehmen soll. Habe schon einiges ausprobiert, aber bisher vergebens...
     
  2. kazhar

    kazhar Viertel Gigabyte

    das ist ein recht unnötiger bug

    deine komplette schleife wird intern als eine "befehlszeile" behandelt. vor der ausführung einer zeile werden aber dummerweise die ganzen variablen in der zeile expandiert. ergo steht bei _allen_ durchläufen der schleife immer der selbe wert - der vom 1. durchlauf - in den variablen...

    edit: das mit den ! hat bei mir auch nie funktioniert ;)
     
    Last edited: Aug 27, 2010
  3. sonderbar

    sonderbar Byte

    Gibt es vielleicht Verbesserungsvorschläge zu dem Code?
    Was gemacht werden soll, sollte ja leicht ersichtlich sein...
     
  4. kazhar

    kazhar Viertel Gigabyte

    ich verwende für solche schleifen rekursive aufrufe. die methode funktioniert schon seit ewigkeiten und der variablen-expansions-bug greift nicht

    Code:
    @echo off
    if %1.==loop1. goto loop1
    
    FOR /F %%i IN ('dir /b /s *.mpo') DO call %0 loop1 "%%i"
    goto ende
    
    :loop1
    "%~dp0\MPO2Stereo.exe" "%2"
    set alt=%2
    set neu=%alt:~0,-4%
    echo %alt%
    echo %neu%
    "c:\Program Files (x86)\IrfanView\i_view32.exe" "%neu%%linksa%" /resize_long=800 /aspectratio /resample /convert="%neu%%linksa%"
    "c:\Program Files (x86)\IrfanView\i_view32.exe" "%neu%%rechtsa%" /resize_long=800 /aspectratio /resample /convert="%neu%%rechtsa%"
     "%~dp0\jpg2jps.exe" "%2" -delete
    goto ende
    
    :ende
    
     
  5. sonderbar

    sonderbar Byte

    Das ist ja großartig!!! Es läuft nun endlich!!! Vielen, vielen Dank!!!
    Durch diese Batch-Datei bleibt mir sehr viel Handarbeit erspart!
    Nur eine Kleinigkeit musste noch geändert werden:
    bei der FOR-Schleife muss man am Ende die Anführungszeichen weglassen.
     
Thread Status:
Not open for further replies.

Share This Page