Vajíčková mánie Vajíčková mánie
Probíhá výprodej HTML, JavaScript a Bootstrap. Slevy až 80 %
Vyšlehej si extra vědomosti! Až 100% bodů na prémiový obsah zdarma! Více zde

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

Aktivity (1)
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
Avatar
Šimon Adámek
Redaktor
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
Avatar
Šimon Adámek
Redaktor
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
Redaktor
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.