CD mechanika: jaké písmeno má přiděleno? (dávkový soubor)
Abych to vysvětlil, potřebuju napsat dávk. soubor běžící ve WinXP, který najde cd mechaniku tak, že je v ní vloženo cd a ta dávka hledá v kořenovým adresáři konkétní soubor, pokud ho najde tak nastaví systémovou proměnnou, a to mi právě nefunguje.
Můžete se mrknout a poradit, co dělám špatně?
@echo off
for %%F in (Z: Y: X: W: V: U: T: S: R: Q: P: O: N: M: L: K: J: I: H: G: F: E: D: C:) do (if exist %%F\winbom.ini set CDDrive=%%F)
Nejde o ten název souboru, ale jde o to, že nedokážu nastavit systémovou proměnnou CDDrive, i když teda nechápu proč. Dávku jsem vyrobil sám ...
Pavel
Vyzkoušel jsem a funguje to. Ovšem problém může být v tom, že proměnná nepřežije konec dávky, jakmile ji ukončíš (t.j. skončí prostředí dávky), tak přestane existovat.
Zkus si do své dávky přidat řádek
echo %CDDrive%
a uvidíš, že to funguje (pokud se ti zavře příliš rychle okno, tak si to zastav příkazem PAUSE).
A malá poznámka nakonec: ty závorky obklopujíci if jsou zbytečné (na druhou stranu ale nic nepokazí)
Pytlíku !!!! Nepředbíhej !!!!
No jo, už jdu do kouta!
Já bych řekl, že ta dávka funguje (zkoušel jsem ji u sebe)... Proč si myslíš, že se systémová proměnná nenastaví?
Dopiš tam příkaz
a dej vědět...
Jejda, díky všem! Jo, v dávce umím vypsat název proměnné, to mi funguje (i s pause umím zacházet), ale fakt to vypadá, jako by se ta systémová proměnná po ukončení dávky ztratila.
A jak jsem na to přišel? No, vypsal jsem si systémový proměnný příkazem set.
Pavel
Doufám, že Hosta neurazím, ale: No, to je právě ono. Proměnná zanikla.
Pro kazdy davkovy soubor se pri jeho spusteni (podobne jako pro DOS program) vytvori virtualni stroj, takze promenne nepreziji
A dá se to nějak obejít? Třeba definovat tu proměnnou před spuštěním dávky?
Pavel
Hm, tak to nepomohlo.
Pavel
@echo off
for %%F in (Z: Y: X: W: V: U: T: S: R: Q: P: O: N: M: L: K: J: I: H: G: F: E: D: C:) do (if exist %%F\winbom.ini set CDDrive=%%F)
echo %CDDrive%
pause
Vše vypadá dobře, ale po ukončení prostě příkaz set nevypíše tu CDDrive ...
Pavel
Záleží jak je dávka v celém kontextu - jestli se po té dávce ještě něco zpracovává, jestli se ta proměnná má někam předat atd... Není problém např. zavolat jinou dávku (příkazem CALL) a té předat písmeno jednotky jako parametr...
Pro trvalé nastavení promněnné by měl sloužit příkaz SETX (je obsažen v Resource kitu), ale netestoval jsem.
setx.html
Máš dvě možnosti: Buď musíš nastavení i použití proměnné vyřídíš v jednom dosovském okně (tedy jednou dávkou), nebo tu proměnnou pošleš ve vhodném tvaru do vhodného souboru (např. .bat), který se postará o pozdější použití. Např. to může vypadat takto (písmena jednotek nebudu vypisovat všechny):
for %%f in (Z Y X V ... E D C) do if exist %%f:\Winbom.ini echo set CDDrive=%%f:>C:\CDDrive.bat
Start-spustit a napis tam cmd
v novootvorenej konzole spust tvoj bat subor
potom prikaz set
vyspise ti aj premennu CDDrive (az pokial neukoncis konzolu), je to tak?
Proste tu davku spustaj v tej istej konzole predtym ako tu premennu budes potrebovat, pripadne si do toho bat suboru na koniec daj volanie toho kde tu premennu potrebujes apod.
To co by si chcel by slo naposledy tak na Win98 alebo Me, kde proste vsetko medzi sebou koliduje (ale aj napriek tomu W98 dodnes doma pouzivam )
Mozno by sa to co chces dalo poriesit v subore autoexec.nt (prip. mozno v config.nt).
Nevím, co má ta bávka způsobit, ale co autorun.inf (umístěný na CD), který zavolá dávku třeba z Windows/command?
Tak děkuju všem za nápady, konečný řešení bude tom, že v jedné dávce budu muset udělat vše potřebný, což není problém. Chci zautomatizovat (to je ale blbý slovo) "připojení" adresáře z CD s využitím junction.exe - dělá to něco, čemu se říká buď symlink nebo snad hardlink, to nevím. No a aby to bylo automatický, tak to nechci dělat ručně, ale v dávce no a tam potřebuju znám "písmeno" cd mechaniky.
Toť vše, problém je tedy zdá se vyřešen.
Díky
Pavel
cely environment plati len pre dobu zivotnosti shellu, tak isto ako v inych unix systemoch. ako zanika shell, zanika ja tvoje nastavenie. preto ak potrebujes spustat viac davkovych uloh, tak si normalne vytvor shell(run->cmd) a spustaj to odtial. ak by si chcel, aby env premenne existovali aj dalej, tak mozno lepsia volba bude cscript ale neskusal som. ak budem mat cas, tak sa na to mozem pozriet.
Díky, ale kvůli mně (3. pád ...) nemusíš, udělám to v jedné dávce.
Pavel