Stránka 1 z 1

Dávka Volné místo na disku - jak zlikvidovat oddělovače

Napsal: 08 dub 2010 08:46
od Jan Pašek
Pánové pokouším se napsat instalační dávku (tedy soubor *.bat), který před instalací zjistí volné místo na disku. abych mohl počítat za pomoci příkazu set potřebuji se zbavit odělovačů mezi jednotlivými řády a bude tu zřejmě problém se zobrazením oddělovače versus kodování LatinII a kamenických.
příklad dávky tak jak ji mám nyní rozepsanou abych mohl popisovat co vlastně dělám a chci

Kód: Vybrat vše

@echo off
echo.
echo  Instaler zjištuje volné místo na Vámi zadaném disku C:
dir C: | find /I "Volných bajtů" > Tmp.txt
for /F "eol=- tokens=5" %%i in (Tmp.txt) do set Key=%%i
echo %Key% > Tmp.txt
rem zde nevým jaký odělovač do příkazu delims aby se to rozebralo na tokens a mohl jsem jednotlivé tokens sloučit již bez odělovačů
for /F "delims= " %%a in (Tmp.txt) do (
echo 1 = %%a
echo 2 = %%b
echo 3 = %%c
echo 4 = %%d
echo 5 = %%e
echo 6 = %%f
echo 7 = %%g
echo 8 = %%h
echo 9 = %%i
echo 10 = %%j
)
echo.
echo  Na disku je volných %Key% bajtů

pause



Jedná se o příkaz delims, který je sočástí příkazu FOR pořád nemohu vyspekulovat jaký odělovač tam zapsat aby se mi výsledek rozdělil na tokens bez odělovačů a mohl jsem jednotlivé tokeny sloučit k dalšímu výpočtu pomocí příkazu set.

PS za každou pomoc budu vděčný tohle trochu vyšší dívčí tak jsem zvědav kdo se najde jestli vůbec někdo.

Re: Dávka Volné místo na disku - jak zlikvidovat oddělovače

Napsal: 09 dub 2010 20:14
od Jan Pašek
Tak dalo se předpokládat že se nikdo neozve nezbylo nic jiného než internet nápověda k příkazům a metoda pokus omyl.
No a povedlo se..v Code dávka která zjistí volnou kapacitu disku a na základě toho spustí nebo ukončí instalaci.

Kód: Vybrat vše

@echo off
chcp 1250 > nul
rem dir c: | find /I "Volnřch bajt" > Tmp.txt
for /F "tokens=5-9* delims=á " %%a in (Tmp.txt) do (
if not "%%a"=="" if "%%b"=="" set Free=0
if not "%%a"=="" if not "%%b"=="" if "%%c"=="" set Free=0
if not "%%a"=="" if not "%%b"=="" if not "%%c"=="" if "%%d"=="" set Free=%%a%
if not "%%a"=="" if not "%%b"=="" if not "%%c"=="" if not "%%d"=="" if "%%e"=="" set Free=%%a%%b
if not "%%e"=="" set Free=%%a%%b%%c
echo.
echo  Na disku c: je %%a %%b %%c %%d %%e bajtu volnych
)
chcp 852 > nul
echo  To je přibližně %Free% MBajtu.
echo  Pro instalaci je potřeba zhruba 10 MBajtu
set /a Free=%Free%-10
echo  Zbývající volná kapacita disku po instalaci činí přibližně %Free% MBajt[u]
del Tmp.txt
If %Free% GTR 0 echo  Spouštím instalaci!
If %Free% LSS 1 echo  STOP!
pause

Bylo třeba vypořádat se se věma zásadními problémy:
1) Příkaz DIR vypisuje volné místo v bajtech a jednotlivé řády číslovky odděluje znakem mě se vždycky mezi trojicí čísel ukazovalo znak podobný "a" . Pokud jsem ale zadal "a" jako odělovač do příkazu delims (příkaz mění odělovače ze standardní mezera tabelátor na vámi zadané a je součástí příkazu FOR) k rozdělení jednotlivých řádů číslovky do tokens "a" až "e" nedošlo tzn. měl jsem zadán chybný odělovač. Když jsem postupně zkusil takřka všechny znaky ASCII2 tabulky, napadlo mne změnit celou znakovou sadu. příkaz k výměně znakové sady je "CHCP " a znaková sada 1250 je znaková sada Windows pro střední Evropu. Chvála pánu bohu při ukládání se odělovače mezi řády v číslici změnily na prosté dlouhé "á" a konečně se mi povedlo rozložit číslo po řádech.

2)Druhý problém příkaz SET nedokáže počítat s číslem větším jak 999 999 999 bylo třeba zaokrouhlit na MBajty. Mno popral jsem se s tím tak trochu lišácky vypustil jsem z čísla posledních 6 číslic jen mi chvíli trvalo než jsem přišel na sadu podmínek (příkaz If), která to zajistí protože číslo se plní od tokenu "a" a vy vždy musíte odebrat poslední dva plné tokeny.

Pokud chcete ptejte se , když vám nebude něco jasné pokud budu vědět odpovím. Předpokládám určitou vaší znalost tvorby dávkových souborů a tak jsem se soustředil pouze na popis problémů se kterými sem se musel poprat.

Re: Dávka Volné místo na disku - jak zlikvidovat oddělovače

Napsal: 09 dub 2010 21:06
od El Diablo
A k čemu je to dobré?

Re: Dávka Volné místo na disku - jak zlikvidovat oddělovače

Napsal: 09 dub 2010 21:50
od Jan Pašek
to El Diablo K tomuhle

Re: Dávka Volné místo na disku - jak zlikvidovat oddělovače

Napsal: 10 dub 2010 00:16
od Pic
Také nějak nechápu na co to je. Volné místo na disku zjistím jednodušeji.

Re: Dávka Volné místo na disku - jak zlikvidovat oddělovače

Napsal: 10 dub 2010 12:19
od Jan Pašek
To PIC tak sem s tím ne jen jedna cesta vede do Říma ale potřebuji aby se na základě výsledku dalo pomocí podmínky rozhodnout zdali je na disku dostatek místa pro instalaci.
Tzn. zdali dávku ukončit nebo pokračovat např. vkopírování souborů.

No a ještě zpět k otázce kčemu to vlastně je. Popsaná část bude součástí instalační dávky ASuite CZ+.

A pokud by to ani takto nestačilo zde je citace z úvodu této dávky:
echo Vámi spuštěný dávkový soubor vám pomůže přemístit soubory ASuite na Váš
echo přenosný disk a to včetně dolňků, pokud si to budete přát, které jsou zatím
echo dostupné pouze pro Českou lokaci tohoto SW.
echo Jedním z doplňků je například instalace vlastního vzledu ASuite.
echo Jsou doplněny i variace na původně nabízené vzhledy a galerie osobních
echo obrázků.
echo Dále nabízím rozšířený přístup k nápovědě a také podrobnou Českou nápovědu.
echo Do ASuite byla také vsunuta složka obsahující utilitku Eject_USB.exe ,
echo která společně s přiloženým dávkovým souborem Eject_USB.bat zařídí bezpečné
echo odebrání vašeho přenosného disku z PC.
echo Po nastavení ASuite budete mít možnost za pomoci dalšího dávkového souboru
echo smazat nepotřebné soubory.

nebo ještě podrobněji k původnímu programu sem dodělal vlastní přídavky a potřebuji je do něj integrovat na přesná místa v adresářové struktuře programu a protože z programování umím alespoň trochu slušně psát dávky beru právě dávku jako pomocníka pro instalaci.

Jěště není jasné na co potřebuji výše popsanou funkci v instalační dávce? Mno ptejte se rád vysvětlím.

Re: Dávka Volné místo na disku - jak zlikvidovat oddělovače

Napsal: 10 dub 2010 12:48
od skunkicz
zlatej InstallSHield

Re: Dávka Volné místo na disku - jak zlikvidovat oddělovače

Napsal: 10 dub 2010 13:06
od Jan Pašek
Mno InstallSHield je možná zlatej ale alespoň z mého pohledu pokud má přenosná aplikace instalátor a nemá koncovku paf zdaleka se mu vyhnu a raději hledám pouze zip verzi k rozbalení protože si nikdy nemohu být jistý kam všude bude instalátor přistupovat.

Další můj názor do dávky než jí spustíš se může podívat každý a snad se moc neutnu když budu tvrdit že alespoň pro nás starší bude alespoň trochu srozumitelné jaké funkce má dávka provádět.

Takže dle mého názoru potencionální uživatel si může dopředu než dávku spustí prověřit co chce na svém PC spustit a zdali vůbec chce dávku užít.

Další psaním dávky strávím asi tak stejně času jako kdybych se seznamoval z InstallSHield ale dávka má ještě jedno kouzlo alespoň pro mne a tj. Tréning logického myšlení. "Blbá není ta mašina jen jsem jí to blbě podal a ona funguje podle mého chybného podání"