Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akci až 30 % zdarma při nákupu e-learningu - Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Vyčtení dat z txt souboru v batch

Aktivity
Avatar
Michaal.K
Člen
Avatar
Michaal.K:9.11.2018 14:32

Ahoj,
mám problém s vyčtením dat z txt souboru v batchi.
Data vyčítám takto:

For /F "tokens=*" %%A IN ('Type %cestaVstData%') DO (
  Set nazevPolozky=%%A
  echo %nazevPolozky%
  echo %%A
)

Txt souboru vypadá takto:

00001
00002
00003

Jde mi o to, že v těle cyklu se mi v konzoli nezobrazi tento prikaz: echo %nazevPolozky% ale prikaz: echo %%A se zobrazi. Potřebuji si vycteny radek přeuložit do nové proměnné a s ní dál pracovat v těle cyklu.

Po spuštění bat souboru se mi zobrazí toto:

ECHO is off.
00001
ECHO is off.
00002
ECHO is off.
00003

Takže v proměnné A mám vždy vyčtenou danou řádku z txt, ale přeuložení do proměnné nazevPolozky se nezdaří. Nevíte někdo co stím??
Díky moc za rady a pomoc.

 
Odpovědět
9.11.2018 14:32
Avatar
Odpovídá na Michaal.K
don.jarducius:9.11.2018 15:38

Ahoj, problém je podle mě v pasáži

echo %nazevPolozky%

proměnná %nazevPolozky% bude prázdná a v tom případě se provede příkaz echo, který vypisuse stav echa :)

Nahoru Odpovědět
9.11.2018 15:38
Ten kdo nechce hledá důvod, ten kdo chce hledá způsob
Avatar
Šimon Adámek
Tvůrce
Avatar
Šimon Adámek:9.11.2018 15:54

Ahoj, vyzkoušej tohle:

SETLOCAL ENABLEDELAYEDEXPANSION
For /F "tokens=*" %%A IN ('Type %cestaVstData%') DO (
  set nazevPolozky=%%A
  echo !nazevPolozky!
  echo %%A
)

viz. http://www.robvanderwoude.com/…xpansion.php

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět
9.11.2018 15:54
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Šimon Adámek
Michaal.K:14.11.2018 7:46

Ahoj, díky za pomoc. Už to funguje. Vše jsem měl stejné kromě:

echo !nazevPolozky!

já jsem tam měl procenta místo vykřičníků. Chtěl jsem se zeptat proč vykřičníky a proč to nefungovalo s procenty? Díky moc za pomoc...

 
Nahoru Odpovědět
14.11.2018 7:46
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Šimon Adámek
Tvůrce
Avatar
Odpovídá na Michaal.K
Šimon Adámek:14.11.2018 11:08

Přečti si ten odkaz co jsem přiložil, je to tam vysvětleno.

 
Nahoru Odpovědět
14.11.2018 11:08
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Šimon Adámek
Michaal.K:15.11.2018 11:01

Ahoj, díky za info. Nějak jsem to pročetl, ale moc moudrej ztoh nejsem.
Ještě mám jeden dotaz a nechci zakládat nové téma. Potřebuji vnořit dva for cykly do sebe, ale nějak se mi to nedaří. První cyklus se provede ale druhý ne...

SetLocal EnableDelayedExpansion

set dirPuvodni=D:\Copy Test1\
set cestaVstData="D:\Vstupni Data.txt"
set nazevPolozky=Nazev polozky

For /F "tokens=*" %%A IN ('Type !cestaVstData!') DO (
  set nazevPolozky=%%A
  echo Vnejsi !nazevPolozky!
  echo Vnejsi !dirPuvodni!
  pause

  For /R "!dirPuvodni!" %%M IN (*.*) DO (
    echo Vnitrni !dirPuvodni!
    pause
  )
)
EndLocal

Prosím o radu a pomoc.....

 
Nahoru Odpovědět
15.11.2018 11:01
Avatar
Šimon Adámek
Tvůrce
Avatar
Odpovídá na Michaal.K
Šimon Adámek:15.11.2018 13:21
SetLocal EnableDelayedExpansion
set dirPuvodni=D:\Copy Test1\
set cestaVstData="D:\Vstupni Data.txt"
set nazevPolozky=Nazev polozky

For /F "tokens=*" %%A IN ('Type !cestaVstData!') DO (
  set nazevPolozky=%%A
  echo Vnejsi !nazevPolozky!
  echo Vnejsi !dirPuvodni!
  pause
  For /R %dirPuvodni% %%M IN (*.*) DO (
        echo Vnitrni !dirPuvodni!
    pause
 )
)
EndLocal

Batch se snaží veškeré proměnné označené "%%" nahradit při zapnutí programu. Ve for cyklu žádná hodnota neexistuje (proto se provedlo jen echo a výstup byl stav echa (ECHO is off)). Ty výkřičníky označují proměnnou, které se hodnota přiřadí až za běhu. Proč nahrazení nefunguje ve for /r nevím.

 
Nahoru Odpovědět
15.11.2018 13:21
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Šimon Adámek
Michaal.K:16.11.2018 8:54

Ok díky za info. Nakonec jsem to vygooglil a upravil kód takto:

SetLocal EnableDelayedExpansion
set dirPuvodni=D:\Copy Test1\
set cestaVstData="D:\Vstupni Data.txt"
set nazevPolozky=Nazev polozky

For /F "tokens=*" %%A IN ('Type !cestaVstData!') DO (
  set nazevPolozky=%%A
  echo Vnejsi !nazevPolozky!
  echo Vnejsi !dirPuvodni!
  pause
  PUSHD !dirPuvodni!
  For /R %%M IN (*.*) DO (
    echo Vnitrni !dirPuvodni!
    pause
 )
POPD
)
EndLocal

Nyní již vše funguje.
Díky za pomoc a rady

 
Nahoru Odpovědět
16.11.2018 8:54
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.