Batch - String substitution in for

ZodiacXP

Erfahrenes Mitglied
Ich lese alle .tex Dateien aus einem Verzeichnis und möchte genau deren Namen als .bib haben.

Code:
@echo off
set tmp=""

for %%f in (*.tex) do (
    set tmp="%%f"
    set tmp=%tmp:tex=bib%
    echo %tmp%
)

Beispiel:

Vorhandene Dateien:
  • document.tex
  • foo.tex
  • bar.tex
  • bib.bat

Gedachte Ausgabe:
Code:
document.bib
foo.bib
bar.bib

Leider gibt die obige Batch immer nur dieses aus:
Code:
bar.bib
bar.bib
bar.bib

Verstehe nicht warum die Variable sich nicht ändern kann.
 
Hi.
Verstehe nicht warum die Variable sich nicht ändern kann.
Weil das in Batch nunmal so ist. Variablen werden nur einmal für jeden Ausdruck ersetzt, in dem Fall wenn die Schleife das erste Mal interpretiert wird.

Du mußt die verzögerte Variablen-Expansion einschalten und diese Art von Variablen verwenden.

Siehe "help set" oder :google:

Gruß
 
SETLOCAL EnableDelayedExpansion

und alle Variablen in ! statt % einfassen.

Klappt wunderbar - vielen Dank!
 
Zurück