Aus einer FOR-Schleife die Variable benutzen anpassen und weiterverwenden...
Hallo zusammen,
ich bastel jetzt schon mehrere Stunden an dem Problem herum und komme nicht weiter. Ich hoffe ihr könnt mir helfen:
Ich möchte den Zählerwert der FOR-Schleife auslesen und als neuen Dateinamen verweden. Der Rückgabewert aus der Verzeichnis-Datei lautet "911023". Ich benötige aber für den zukünftigen Dateinamen nur die "102" aus der obigen Nummer.
Ich hoffe ihr könnt mir helfen...
REM * Variablen werden gesetzt *
REM
set DAT_ART=???.art_20080315*
set DAT_TRE=???.tre_20080315*
set DATEI=Verzeichnisse.txt
set QUELLE=U:\Filialen
set ZIEL=D:\TEST
REM * Kopiervorgang *
REM *
for /F "delims=" %%I in (%DATEI%) do (
set KURZ=%%I
type %QUELLE%\%%I\Backup\%DAT_ART% > %ZIEL%\%%I\im_export\%KURZ%.art
type %QUELLE%\%%I\Backup\%DAT_TRE% > %ZIEL%\%%I\im_export\%KURZ%.tre
)
ich bastel jetzt schon mehrere Stunden an dem Problem herum und komme nicht weiter. Ich hoffe ihr könnt mir helfen:
Ich möchte den Zählerwert der FOR-Schleife auslesen und als neuen Dateinamen verweden. Der Rückgabewert aus der Verzeichnis-Datei lautet "911023". Ich benötige aber für den zukünftigen Dateinamen nur die "102" aus der obigen Nummer.
Ich hoffe ihr könnt mir helfen...
REM * Variablen werden gesetzt *
REM
set DAT_ART=???.art_20080315*
set DAT_TRE=???.tre_20080315*
set DATEI=Verzeichnisse.txt
set QUELLE=U:\Filialen
set ZIEL=D:\TEST
REM * Kopiervorgang *
REM *
for /F "delims=" %%I in (%DATEI%) do (
set KURZ=%%I
type %QUELLE%\%%I\Backup\%DAT_ART% > %ZIEL%\%%I\im_export\%KURZ%.art
type %QUELLE%\%%I\Backup\%DAT_TRE% > %ZIEL%\%%I\im_export\%KURZ%.tre
)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 83551
Url: https://administrator.de/forum/aus-einer-for-schleife-die-variable-benutzen-anpassen-und-weiterverwenden-83551.html
Ausgedruckt am: 16.05.2025 um 06:05 Uhr
6 Kommentare
Neuester Kommentar
Hallo chlages und willkommen im Forum!
Das Schlüsselwort für das Problem / die Lösung lautet "delayedexpansion". Die geänderte Batchdatei sähe damit (ungetestet) so aus:
Damit die Variable KURZ innerhalb der Schleife ausgewertet werden kann, muss "delayedexpansion" eingeschaltet ("enable"d) und die Variablenschreibweise von %KURZ% auf !KURZ! abgeändert werden. Da nur die 3 Stellen nach Position 2 benötigt werden, muss der entsprechende Teilstring gebildet werden (siehe dazu auch "set /?").
Eine Alternative wäre die Verwendung eines Unterprogrammes:
Grüße
bastla
[Edit] Biber-Bug vorweggenommen
und dann auch noch als Zweiter korrigiert ("%%I" in den beiden "type"-Zeilen der zweiten Variante durch "%~1" ersetzt) [/Edit]
Das Schlüsselwort für das Problem / die Lösung lautet "delayedexpansion". Die geänderte Batchdatei sähe damit (ungetestet) so aus:
@echo off & setlocal enabledelayedexpansion
REM * Variablen werden gesetzt *
REM
set DAT_ART=???.art_20080315*
set DAT_TRE=???.tre_20080315*
set DATEI=Verzeichnisse.txt
set QUELLE=U:\Filialen
set ZIEL=D:\TEST
REM * Kopiervorgang *
REM *
for /F "delims=" %%I in (%DATEI%) do (
set "KURZ=%%I"
type %QUELLE%\%%I\Backup\%DAT_ART% > %ZIEL%\%%I\im_export\!KURZ:~2,3!.art
type %QUELLE%\%%I\Backup\%DAT_TRE% > %ZIEL%\%%I\im_export\!KURZ:~2,3!.tre
)
Eine Alternative wäre die Verwendung eines Unterprogrammes:
@echo off & setlocal
REM * Variablen werden gesetzt *
REM
set DAT_ART=???.art_20080315*
set DAT_TRE=???.tre_20080315*
set DATEI=Verzeichnisse.txt
set QUELLE=U:\Filialen
set ZIEL=D:\TEST
REM * Kopiervorgang *
REM *
for /F "delims=" %%I in (%DATEI%) do call :ProcessFile "%%I"
goto :eof
:ProcessFile
set "KURZ=%~1"
type %QUELLE%\%~1\Backup\%DAT_ART% > %ZIEL%\%~1\im_export\%KURZ:~2,3%.art
type %QUELLE%\%~1\Backup\%DAT_TRE% > %ZIEL%\%~1\im_export\%KURZ:~2,3%.tre
goto :eof
Grüße
bastla
[Edit] Biber-Bug vorweggenommen
Moin chlages,
willkommen im Forum.
Eine Möglichkeit zur Lösung wäre das Aktivieren der "verzögerten Variablenauflösung", einer Option, die Dir ermöglicht, eine Variable innerhalb einer CMD-Anweisung zu setzen und zu verwenden.
Andere Variante ohne DelayedExpansion mit Call:Sub wäre so:
[beides ungetestet]
Grüße
Biber
[Edit]@bastla: Nächstes Mal schreibt jeder von uns eine der beiden Varianten...*gg [/Edit]
[Edit2] Übergabe von %%I an Call:Block ergänzt. Vor bastla. Der hat den gleichen Bug... [/Edit2]
willkommen im Forum.
Eine Möglichkeit zur Lösung wäre das Aktivieren der "verzögerten Variablenauflösung", einer Option, die Dir ermöglicht, eine Variable innerhalb einer CMD-Anweisung zu setzen und zu verwenden.
@echo off & setlocal enableDelayedExpansion
REM * Variablen werden gesetzt *
REM
set DAT_ART=???.art_20080315*
set DAT_TRE=???.tre_20080315*
set DATEI=Verzeichnisse.txt
set QUELLE=U:\Filialen
set ZIEL=D:\TEST
REM * Kopiervorgang *
REM *
for /F "delims=" %%I in (%DATEI%) do (
set LangVar=%%I
set KURZ=!LangVar:~2,3!
type %QUELLE%\%%I\Backup\%DAT_ART% > %ZIEL%\%%I\im_export\!KURZ!.art
type %QUELLE%\%%I\Backup\%DAT_TRE% > %ZIEL%\%%I\im_export\!KURZ!.tre
)
@echo off & setlocal
REM * Variablen werden gesetzt *
REM
set DAT_ART=???.art_20080315*
set DAT_TRE=???.tre_20080315*
set DATEI=Verzeichnisse.txt
set QUELLE=U:\Filialen
set ZIEL=D:\TEST
REM * Kopiervorgang *
REM *
for /F "delims=" %%I in (%DATEI%) do set "LangVar=%%I" & call:ForEachLine %%I
goto :eof
:ForEachLine Als Parameter1 wird die Laufvariable %%I übergeben
set KURZ=%LangVar:~2,3%
type %QUELLE%\%1\Backup\%DAT_ART% > %ZIEL%\%1\im_export\%KURZ%.art
type %QUELLE%\%1\Backup\%DAT_TRE% > %ZIEL%\%1\im_export\%KURZ%.tre
goto :eof
Grüße
Biber
[Edit]@bastla: Nächstes Mal schreibt jeder von uns eine der beiden Varianten...*gg [/Edit]
[Edit2] Übergabe von %%I an Call:Block ergänzt. Vor bastla. Der hat den gleichen Bug... [/Edit2]
@Biber
Bis wir das ausgeknobelt haben, sind wir mit beiden Varianten auch schon fertig ...
Grüße
bastla
Bis wir das ausgeknobelt haben, sind wir mit beiden Varianten auch schon fertig ...
Grüße
bastla