Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno úprava dávkového souboru

Dobrý den.
Mám dávkový soubor pro zjištění velikosti zadaného souboru uvnitř dávky. Potřeboval bych to modifikovat na tvar, kdy místo %1 pro externí proměnnou tuto proměnnou soubor nastavím uvnitř dávky.
Jinak řečeno, neumím upravit výraz %~z1 na tvar pro proměnnou definovanou uvnitř dávky v SET %soubor% = c:\Windows\System32\COMMAND.COM

@echo off
if not exist %1 echo Zadany soubor %1 nebyl nalezen && goto :eof

if %~z1 EQU 50648 goto :0
echo Soubor ma jinou velikost %~z1 B, nez pozadovanych 50648 B
goto :eof

::
:0
echo Soubor %1 o velikosti %~z1 B byl nalezen

:: DONE

Pomůžete mi s tím někdo?

Vycházím z %~z1 Expands %1 to size of file.
viz http://www.microsoft.com/resources/documentation/w indows/xp/all/proddocs/en-us/percent.mspx?mfr=true

Předmět Autor Datum
set File=c:\Windows\System32\COMMAND.COM if not exist %File% echo Zadany soubor %File% nebyl nalezen…
Jan Fiala 22.06.2011 18:23
Jan Fiala
Tu prostou náhradu jsem zkoušel a taky mi nefungovala. Dává to tento výsledek: Následující použití…
yorg 22.06.2011 19:03
yorg
Na první pohled vidím chybu ve VŠECH příkazech goto: má být goto o, ne goto :o. Navíc návěští eof ne…
Pytlík 22.06.2011 19:05
Pytlík
Goto :0 i goto 0 aspoň pod win7 funguje Goto :eof je goto na konec souboru. taky to znám jen půl rok…
MM_tank 22.06.2011 19:42
MM_tank
Řekl bych to tak: Užitečná informace. ... A jdu se stydět do roští.
Pytlík 22.06.2011 20:04
Pytlík
Goto :eof se používá ve smyslu ukončení nějaké smyčky/odskoku. když jsou všechny ukončeny, teprve v…
lední brtník 22.06.2011 21:53
lední brtník
Pánové, k tomu původnímu zadání by se řešení nenašlo? Já zkoušel různé kombinace a bez výsledku.
yorg 23.06.2011 12:15
yorg
vlnovková syntaxe mi nefungovala u proměnných přiřazených přes set, zkoušel jsem všechny dvě možnost…
lední brtník 24.06.2011 11:06
lední brtník
Po čase nakouknu do Poradny a je tu funkční odpověď. Chytré, díky. A ty barvičky taky potěšily.:bee…
yorg 04.07.2011 16:43
yorg
Jde o to ze si definuju treba: set a1=ahoj set a2=nazdar set a3=hello set a4=sobota set /a var=0 se… poslední
martimb 19.08.2011 19:01
martimb
set File=c:\Windows\System32\COMMAND.COM

if not exist %File% echo Zadany soubor %File% nebyl nalezen && goto :eof

if %~zFile% EQU 50648 goto :0
echo Soubor ma jinou velikost %~zFile% B, nez pozadovanych 50648 B
goto :eof

::
:0
echo Soubor %File% o velikosti %~zFile% B byl nalezen

:: DONE

Dalsi moznost:
napis dalis davku, ktera bude obsahovat pouze:

set File=c:\Windows\System32\COMMAND.COM
call staradavka %File%

Tu prostou náhradu jsem zkoušel a taky mi nefungovala. Dává to tento výsledek:

Následující použití operátoru cesty v nahrazení parametru dávky
je neplatné: %~zFile% EQU 50648 goto :0

Platný formát zobrazíte zadáním příkazu CALL /? nebo FOR /?
Nesprávná syntaxe příkazu

Tu druhou možnost zatím používám, ale chtěl bych se tomu dvojímu volání vyhnout.

Goto :eof

se používá ve smyslu ukončení nějaké smyčky/odskoku. když jsou všechny ukončeny, teprve v tom případě je to exit.

ve smyčce potřebuju používat/modifikovat proměnnou. to u interpretu přímo nejde, ale třeba voláním subrutiny - parametr přijmu jako %1, a zpět do smyčky se vracím "goto :EOF"

for /l %%a in (%low%,1,%high%) do call :SUB %%a
goto END

:SUB
hchkrdtn %1
goto :EOF

END

nebo na různých místech batky potřebuju stejnou sekvenci použít víckrát, a zase se vrátit na původní místo. volám stejně "call :SUB", a "goto :EOF" mě vrátí do pokračování.

vlnovková syntaxe mi nefungovala u proměnných přiřazených přes set, zkoušel jsem všechny dvě možnosti co mě napadly.
tvar s %1 takto zpracovat šel. tak jsem použil volání "call :sub", kde se předané parametry oddělené čárkou zas čtou jako %1,%2,...

@echo off
 color 70
 set file=C:\WINDOWS\system32\command.com
 set bytes=51166
 call :SUB %file%,%bytes%
goto END

:SUB
 echo "%~nx1" ma velikost "%~z1"byte, zadani: "%2"byte
 if "%~z1"=="" echo Zadany soubor %1 nebyl nalezen & goto :EOF
 if "%~z1"=="%2" goto JO
:NE
 echo Soubor ma jinou velikost %~z1 B, nez pozadovanych %2 B
 color 40 & goto :EOF
:JO
 echo Soubor %1 o velikosti %~z1 B byl nalezen
 color 20 & goto :EOF

:END

Zpět do poradny Odpovědět na původní otázku Nahoru