Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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

Předmět Autor Datum
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, jakmil…
Pytlík 08.02.2006 14:10
Pytlík
Pytlíku !!!! Nepředbíhej !!!! :.(
host 08.02.2006 14:12
host
No jo, už jdu do kouta!
Pytlík 08.02.2006 14:14
Pytlík
Já bych řekl, že ta dávka funguje (zkoušel jsem ji u sebe)... Proč si myslíš, že se systémová proměn…
host 08.02.2006 14:11
host
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), a…
Pavel 08.02.2006 14:14
Pavel
Doufám, že Hosta neurazím, ale: No, to je právě ono. Proměnná zanikla.
Pytlík 08.02.2006 14:16
Pytlík
Pro kazdy davkovy soubor se pri jeho spusteni (podobne jako pro DOS program) vytvori virtualni stroj…
Jan Fiala 08.02.2006 14:17
Jan Fiala
A dá se to nějak obejít? Třeba definovat tu proměnnou před spuštěním dávky? Pavel
Pavel 08.02.2006 14:19
Pavel
Hm, tak to nepomohlo. Pavel
Pavel 08.02.2006 14:20
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 (i…
Pavel 08.02.2006 14:17
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 pro…
host 08.02.2006 14:25
host
Máš dvě možnosti: Buď musíš nastavení i použití proměnné vyřídíš v jednom dosovském okně (tedy jedno…
Pytlík 08.02.2006 14:28
Pytlík
Start-spustit a napis tam cmd v novootvorenej konzole spust tvoj bat subor potom prikaz set vyspise…
MM.. 08.02.2006 14:29
MM..
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 Wind…
Kráťa 08.02.2006 14:50
Kráťa
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ý,…
Pavel 08.02.2006 14:51
Pavel
cely environment plati len pre dobu zivotnosti shellu, tak isto ako v inych unix systemoch. ako zani…
IgorK 08.02.2006 14:55
IgorK
Díky, ale kvůli mně (3. pád ...) nemusíš, udělám to v jedné dávce. Pavel poslední
Pavel 08.02.2006 15:05
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í)

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

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).

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.

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