Batch fájl olvasás probléma?
a feladat az lenne, hogy egy text dokumentum adatát kéne összehasonlítani egy változóval. Nekem nem működik, tudnátok segíteni?
kód:
for /f "tokens=*" %%A in (date.txt) do (echo %%A)
if %DATE%==%%A (goto input) else goto a
:a
...
:input
Igazából a fájl beolvasás működik, az iffel van a probléma.
Szia.
A következőek a gondok a fenti "programmal" :
1. A for ciklusban csak egy utasitás hajtódik végre (echo %%A), szerintem ide be kellene rakni az if-et.
2. Ha a fent leirt IF-et berakod a for ciklusba akkor annak valamelyik ága mindenképp végre fog hajtódni (vagy az igaz ága, (ha a fájlból kiolvasott utolsó dátum - jelenlegi alapot szerint) egyenlő az aktuális dátummal, vagy a hamis ága ha nem egyenlőek).
Szerintem valahogy igy :
for /f "tokens=*" %%A in (date.txt) do (
_ _echo %%A
_ _if %DATE%==%%A (goto input)
)
goto a
:input
...
...
goto _end
:a
...
...
...
:_end
Sok sikert. Üdv.
Szia.
Köszönöm a választ, de sajnos még mindig nem működik.
for /f "tokens=*" %%A in (date.txt) do (
echo %%A
if %DATE%==%%A (goto input)
goto a
)
mindig ugrik az a-ra.
de hogyha a kettőt kicserélem,
for /f "tokens=*" %%A in (date.txt) do (
echo %%A
if %DATE%==%%A (goto a)
goto input
)
akkor pedig mindig az inputra ugrik.
Előre is köszönöm a segítséget!
Szia.
Mit szeretnél tulajdonképpen ?
Mivel ahogyan a leirásod szól, az van van leprogramozva, vagy forditva, a leprogramozott utasitásokról jó leirást adtál.
Ez a programod :
for /f "tokens=*" %%A in (date.txt) do (
echo %%A
if %DATE%==%%A (goto input)
goto a
)
A fenti esetben akkor ugrik az "input" cimkére, ha az aktuális dátum egyenlő a a fájl első sorából kiolvasott adattal (dátum) : if %DATE%==%%A (goto input)
Minden más esetben (és ez nincs feltételhez kötve) pediglen rögtön kilép a ciklusból : goto a
Tehát először fogalmazd meg a feltételeket, mit mikor kell csinálni (gondolok itt az "input"-ra illetve az "a"-ra), minden egyes beolvasott dátumnál kell-e végrehajtani valamelyiket ("a" vagy "input"), vagy csak akkor ha egyezés van. Illetve még azt kell eldönteni, hogy az "a" vagy az "input" egyszer vagy többször lesz végrehajtva, mivel annak megfelelően kell szervezni a batch fájlt.
Sok sikert. Üdv.
Szia.
Akkor szerintem a következő a módszer :
A ciklusban megnézed, hogy van-e mai dátum, ha van ekkor egy változó értékét beállitod modjuk 1-re,
Cikluson kivűl IF-el teszteled a változót, ha 1 akkor "a", egyéb esetben "input".
Valahogy igy :
set /a valasz=0
for /f "tokens=*" %%A in (date.txt) do (
_ _echo %%A
_ _if %DATE%==%%A (set /a valasz=1)
)
if %valasz% equ 1 (goto a)
:input
...
...
goto _end
: a
...
...
:_end
Sok sikert. Üdv.
Szia.
Miért is ? Légyszives indokold meg, miért add mindig nullát.
Kipróbáltad ? Mert én igen, és nekem jól müködott, csak akkor adott nullát, ha nem volt a fájlban a mai nappal egyező dátum.
Üdv.
Szia.
Én kipróbáltam új fájlban, másik környezetben, de nekem ott se működött. Lehet, hogy a txt-vel van a probléma? hogy még egy felesleges adatot is utána ír, ami miatt nem működik?
Szia.
Valahogyan biztos ki lehet szűrni azt is, de azt hogy hogyan én nem tudom, szerintem egyszerűbb a másik megoldás, ha a dátumhoz is hozzáadod azt a plusz karaktert és igy viszgáltatod a feltételt, (de előtte biztosnak kell lenned benne, hogy az a plusz karakter biztosan szóköz - mert egyéb esetben megint "mindig nullát fog visszadni"), valahogy igy (idézőjelek közzé kell tenni a feltételeket és beirni az idézőjelekhez a plusz karaktert) :
if "%DATE% "=="%%A" (set /a valasz=1)
A fenti sor az aktuális dátum+egy szóköz egyezését vizsgálja a fájlból kiolvasott dátummal (és ennek a fájlból kiolvasott dátumnak a végén is van egy plusz szóköz).
Kipróbáltam, nálam működik.
Sok sikert. Üdv.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!