presidente
Goto Top

For Schleife mit Variable setzen und Wert kürzen

Hallo, ich bin neu hier und hoffe ich bin im richtigen Forum gelandet.


Muss eine Ordnerstruktur auslesen und die Dateinamen für ein SQL-Skript kürzen, dieses wird dann aufgerufen
und dort wird die metaid verwendet.


Vorhanden sind z.B. solche Dateien:

00001999_00001957.data
00001999_00001958.data
00001999_00001959.data
...

Immer in der gleichen Länge


Die metaid soll jeweils so gesetzt werden:

metaid=

00001957
00001958
00001959
...

Die Routine funktioniert leider nicht so, ist die Syntax falsch ? Mit Sub-Routinen (call :sub1) kann ich nicht arbeiten, weil vorher schon
eine for Schleife läuft und somit funktioniert :EOF nicht oder gibt evtl :EOF1 ???

for /F "delims=" %%b in ('dir /b d:\Files\00001000\*.data') do set metaid=%%b:~9,8%

:~9,8%

ab der 9. Stelle anfangen und nur 8 Stellen nehmen.

Hat jemand eine Idee ?


Veilen Dank

Stefan

Content-ID: 203548

Url: https://administrator.de/contentid/203548

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

colinardo
colinardo 19.03.2013 um 09:50:54 Uhr
Goto Top
Stichwort: delayed expansion
setlocal ENABLEDELAYEDEXPANSION
for /F "delims=" %%b in ('dir /b d:\Files\00001000\*.data') do (  
   set metaid=%%b
   set metaid=!metaid:~9,8!
)
Grüße Uwe
presidente
presidente 19.03.2013 um 10:12:44 Uhr
Goto Top
Vielen Dank Uwe,
funkltioniert soweit. Wie kann ich nun die gesetzten Werte wieder in eine Datei schreiben (c:\kurze_namen.txt), damit ich das sql-script aufrufen kann, denn das rufe ich dann so auf:

@for /F %%c in (c:\kurze_namen.txt) do call %pfad%\SQL\SQL-Command.cmd %%c

so klappt es jedenfalls nicht:

setlocal ENABLEDELAYEDEXPANSION
for /F "delims=" %%b in ('dir /b %suchpfad%\%ordner%\*.data') do (
set dateiname=%%b
set dateiname=!dateiname:~9,8!
)|echo %dateiname% >> c:\kurze_namen.txt

Echo läuft immer ins leere face-sad

was bewirkt eigentlich setlocal ENABLEDELAYEDEXPANSION ??

Vielen Dank
colinardo
colinardo 19.03.2013 aktualisiert um 10:20:28 Uhr
Goto Top
ENABLEDELAYEDEXPANSION bewirkt die verzögerte Auflösung von Variablen. Um dies zu nutzen musst du innerhalb der FOR-Schleife anstatt von %VARIABLE% --> !VARIABLE! schreiben, also anstatt Prozentzeichen, Ausrufezeichen verwenden:

setlocal ENABLEDELAYEDEXPANSION
for /F "delims=" %%b in ('dir /b %suchpfad%\%ordner%\*.data') do (  
set dateiname=%%b
set dateiname=!dateiname:~9,8!
echo !dateiname! >>c:\kurze_namen.txt
)
presidente
presidente 19.03.2013 um 10:34:42 Uhr
Goto Top
Hallo Colinardo,

vielen Dank für die schnelle Hilfe, funktioniert perfekt.

Für was steht eingentlich setlocal ENABLEDELAYEDEXPANSION , was bewirkt das genau ?

Danke
colinardo
colinardo 19.03.2013 aktualisiert um 10:38:25 Uhr
Goto Top
Zitat von @presidente:
Für was steht eingentlich setlocal ENABLEDELAYEDEXPANSION , was bewirkt das genau ?

SETLOCAL:
Begins localization of environment changes in a batch file.  Environment
changes made after SETLOCAL has been issued are local to the batch file.

ENABLEDELAYEDEXPANSION /DISABLEDELAYEDEXPANSION:
SETLOCAL batch command now accepts optional arguments:
        ENABLEEXTENSIONS / DISABLEEXTENSIONS
            enable or disable command processor extensions.  See
            CMD /? for details.
        ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION
            enable or disable delayed environment variable
            expansion.  See SET /? for details.