Vánoční nadílka Vánoční nadílka
Vánoční akce! Daruj lepší budoucnost blízkým nebo sobě. Až +50 % zdarma na dárkové poukazy. Více informací
Avatar
Michaal.K
Člen
Avatar
Michaal.K:9. listopadu 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. listopadu 14:32
Avatar
Odpovídá na Michaal.K
don.jarducius:9. listopadu 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. listopadu 15:38
Avatar
Šimon Adámek:9. listopadu 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. listopadu 15:54
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Šimon Adámek
Michaal.K:14. listopadu 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. listopadu 7:46
Avatar
Odpovídá na Michaal.K
Šimon Adámek:14. listopadu 11:08

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

 
Nahoru Odpovědět 14. listopadu 11:08
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Šimon Adámek
Michaal.K:15. listopadu 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. listopadu 11:01
Avatar
Odpovídá na Michaal.K
Šimon Adámek:15. listopadu 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. listopadu 13:21
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Šimon Adámek
Michaal.K:16. listopadu 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. listopadu 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.