Jak provést asociace přípon dávkovým souborem?
Jak provést asociace přípon dávkovým souborem?
Např. spustím *.bat a provede se asociace *.pdf do pdfprohlizec.exe. Spustím soubor.pdf a ten se otevře v pdfprohlizec.exe.
Další příklad - spustím *.bat a provede se asociace *.txt do aplikace txtprohlizec.exe. Kliknu na soubor.txt a ten se otevře v txtprohlizec.exe.
Zacíleno na Windows XP až Windows 10.
Dělal bych to spíše *reg soubory, ne baťáky. Výsledek bude takový, jaký chceš.
Nejprve příkazem ftype přiřadíš typ souboru konkrétnímu programu (ten "typ souboru" je vlastně tvůj název) a potom příkazem assoc přiřazuješ tomu typu jednotlivé koncovky.
Pro ilustraci předvedu přiřazení souborů .txt programu D:\Util\PSPad\PSPad.exe:
ftype txtfile="D:\Util\PSPad\PSPad.exe" "%1"
assoc .txt=txtfile
Samozřejmě, že řetězec txtfile jsem dosadil zcela ze své libovůle, může tam být libovolný jiný, třeba "blbec"...
a ještě: Když chceš následně přiřadit ten txtfile i pro jinou koncovku, stačí opakovat příkaz assoc, bez ftype. A naopak: Jedním příkazem ftype lze změnit přiřazení programu všem již vytvořeným asociacím k tomu typu (kdo by to ale u PSPadu dělal, že)
Mám to takto a není to funkční. Kde dělám chybu?
Soubor asociace.reg obsahuje:
ftype txtfile="c:\Users\-\Desktop\txtprohlizec.exe" "%1"
assoc .txt=txtfile
Po spuštění souboru asociace.reg a snaze o zápis do registrů se zobrazí okno s chybovou hláškou:
Editor registru
c:\Users\-\Desktop\asociace.reg nelze importovat: Zadaný soubor není skript registru.
Z editoru registru lze importovat pouze binární soubory registru.
V zadání chybu nevidím (předpokládám, že ta pomlčka v cestě nahrazuje jméno účtu, s kterým se, pochopitelně, nehodláš chlubit), takže jedine snad je chyba v přístupových právech.
Co ti to napíše, když napíšeš ftype txtfile ? (pozor, bez rovnítka, tím by sis to vymazal). Stejně tak assoc .txt
Ano, je to přesně tak, název uživatelského účtu je "-" (pomlčka). V tom problém opravdu není.
C:\Users\->ftype txtfile
txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1
Mimochodem, zkusil jsem natvrdo změnit asociaci *.txt k txtprohlizec.exe v Total Commander a pak se stejně vypisuje stejné sdělení v příkazovém řádku. Přitom se už nově *.txt po rozkliknutí otevře v txtprohlizec.exe
Po změně asociace se stejně vypíše:
C:\Users\->ftype txtfile
txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1
Proč to máš jako reg soubor, když jsi chtěl bat?
Protože dbáno rady od L-Core.
Prakticky vyzkoušeno, že uvedené lze spustit z *.reg, ale z *.bat je to nefunkční.
Z reg tohle nikdy fungovat nebude.
Tak to ho jsem si nevšiml. Nenapadlo mě, že existuje takový vůl, který, když chce spustit příkazy Cmd.exe, tak tomu dá příponu .reg - a diví se, že mu to příkazy nespustí. Končím, to se nedá!
Ale no tak, tyhlle invektivy si nech pro bližní.
Jasně jsem psal "Po spuštění souboru asociace.reg ...".
Problémy s chápáním psaného textu?
Ta poslední věta ale pasuje na tebe. Dotaz zní jak to udělat pomocí bat a pak to zkousíš jako reg.
Řídil jsem se radou od moderátora. Ostatní ji četli také. Nikdo nezmínil že přes *.reg cesta nevede.
ona vede ale soubor reg a bat fungují každý trochu jinak.
Cesta přes .reg vede. Jenomže soubor .reg (asociovaný na regedit.exe) musí obsahovat něco jiného, než příkazy pro .bat. Moderátor to považoval za samozřejmé a netušil na jaký programátorský skvost narazil a já jsem nekontroloval příponu souboru, který jsi použil a soustředil se na vlastní příkazy. Možná moje chyba, ale je to tvoje blbost. S takovou úrovní znalostí bys neměl zasahovat do počítače a jenom klikat na ikony...
Není dobré hodnotit někoho koho neznám. Pak se ti nebude stávat, že se ztrapňuješ. Vůbec ti nepřísluší se vyjadřovat takto ke mě ani ke komukoli jinému. Nikdo není zvědavý na invektivní vyjadřování a povrchní řeči, které prakticky nic neřeší. Lidé sem přicházejí pro radu, pro řešení. Pokud jsi tak chytrý, proč jsi mi nevysvětlil a nenapsal jak to udělat?
Prošlo tu X lidí a ani jeden nebyl schopný věcně poradit řešení. Jen povrchní tipy od kterých se nešlo odrazit.
Mohli jste mi pomoci a ušetřili byste mi x hodin času. Nakonec jsem si to nastudoval a napsal sám.
Vyřešeno oběma způsoby. Snad to někomu do budoucna pomůže, když místní znalci nevědí.
*.bat
reg.exe add "hkcr\txtfile\shell\open\command" /ve /t reg_sz /d "c:\users\-\desktop\txtprohlizec.exe \"%%1\"" /f
exit
*.reg
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\txtfile\shell\open\command]
@="C:\\Users\\-\\Desktop\\txtprohlizec.exe \"%1\""
Zcela jasně jsi napsal:
Soubor asociace.reg obsahuje:
ftype txtfile="c:\Users\-\Desktop\txtprohlizec.exe" "%1"
assoc .txt=txtfile
Tak si nevymýšlej. Trocha sebereflexe by ti opravdu slušela.
Pán je mistr vytrhávání z kontextu, proto odkazuji na původní příspěvek a znovu se ptám, kde dělám chybu?
Asociace [139.162.173.xxx], 14.04.2018 13:15
#3
Mám to takto a není to funkční. Kde dělám chybu?
Soubor asociace.reg obsahuje:
ftype txtfile="c:\Users\-\Desktop\txtprohlizec.exe" "%1"
assoc .txt=txtfile
Po spuštění souboru asociace.reg a snaze o zápis do registrů se zobrazí okno s chybovou hláškou:
Editor registru
c:\Users\-\Desktop\asociace.reg nelze importovat: Zadaný soubor není skript registru.
Z editoru registru lze importovat pouze binární soubory registru.
Ano, výsledný kód musí fungovat v *.bat.
Kde děláš chybu? Mícháš dva příspěvky dohromady.
L-Core a Pytlík reagovali na tvůj úvodní příspěvek. Pytlík nereagoval na příspěvek od L-Core a nemá s tím příspěvkem nic společného. Pytlík tedy odpovídal tak, jak je to napsané v úvodním příspěvku a řešil to pomocí dávkového souboru.
Ptal jsem se dvakrát na chybu v kódu. A ty tu vysvětluješ časové souslednosti reakcí ve kterých není odpověď na několikrát položený dotaz.
To ti už ale Pytlík vysvětlil, že si nevšimnul, že bys mohl používat cmd příkazy v reg souboru, protože ho nenapadlo, že bys mohl být tak totálně vypatlaný idiot, když chceš navíc řešit dávkový soubor a najednou jej cpeš do reg souboru. A evidentně jsi.
Takže si dáme nové kolečko a chceš to znovu všechno zopakovat už poněkolikáté? Zvláštní, že to všem je jasné jen tobě ne
Ale no tak ...
Zkus být chytřejší než pan inženýr a vysvětli mi / oprav kód, aby fungovala asociace.
Soubor *.bat obsahuje
ftype txtfile="c:\Users\-\Desktop\txtprohlizec.exe" "%1"
assoc .txt=txtfile
Přesto asociace nefunguje.
Kód není potřeba opravovat, ale je nutné to spustit s administrátorskými právy.
To jsem zkoušel na Win 10 Pro x64 už před x hodinami. Bez úspěchu.
Já to zkoušel před 5 minutama a funguje.
Znovu jsem to prověřil a opravdu to nefunguje. Spouštím *.bat jako správce/administrátor.
Postup:
1) V Total Commanderu ručně změněna a zkontrolována asociace *.txt na notepad.exe
Po rozkliknutí *.txt se soubor otevře v notepad.exe.
2) Následně spuštěn jako správce *.bat s uvedeným kódem.
ftype txtfile="c:\Users\-\Desktop\txtprohlizec.exe" "%1"
assoc .txt=txtfile
3) Po rozkliknutí *.txt se soubor otevře v notepad.exe místo požadovaného txtprohlizec.exe.
Ještě to s tebou zkusím: Zkus rozkliknout .txt odjinud, než z Total Commanderu. On má totiž svoje vnitřní asociace a není vyloučeno, že spouští .txt z nich, že změnu nezaznamenal.
Tohle jsem už dávno prověřil. Vnitřní asociací Total Commanderu to není.
Spusť cmd jako správce a potom ten .bat soubor. Uvidíš tak případné chyby.
cmd spuštěna jako správce. Po provedení dávky je stav stejný. Stále přetrvává asociace, která se má změnit.
C:\Windows\system32>cd ..
C:\Windows>cd ..
C:\>cd c:\Users\-\Desktop\
c:\Users\-\Desktop>asociuj.bat
c:\Users\-\Desktop>ftype txtfile="c:\Windows\notepad.exe" ""
txtfile="c:\Windows\notepad.exe" ""
c:\Users\-\Desktop>assoc .txt=txtfile
.txt=txtfile
c:\Users\-\Desktop>
No vždyť tam máš pořád notepad a ne jiný prohlížeč.
Výborně, všímavý člověk. Zde jsem zkusil opačný postup.
Výchozí stav - v TC ručně asociováno na txtprohlizec.exe.
V cmd jsem batem zkusil opačný postup, asociuji *.txt zpátky na Notepad.
Takže v tom problém není.
Netuším, proč to nefunguje zrovna tobě, ale skript jako takový je správně. Mně dělá přesně to, co má.
V pořádku, strčím to k ledu a třeba se ještě někdo ozve. Takové hlavolamy jsou vždycky jen otázkou času. Díky za zpětnou vazbu a snahu pomoci.
Ještě na jednu věc jsem si vzpomněl: příkazy jsem ti napsal správně, ale platí pro ruční zadávání z konzolového okna. Týká se to příkazu ftype. Když ho používáš v dávkovém souboru (tedy .bat, nebo .cmd - oba jsou totéž), tak musíš zdvojit znak %, aby interpreter (tj. Cmd.exe) poznal, že má dosadit znak procento a ne první parametr spouštěné dávky (který je prázdný) - viz následující řádky:
Pro ruční zadání: ftype txtfile="c:\Users\-\Desktop\txtprohlizec.exe" "%1"
Dávkový soubor: ftype txtfile="c:\Users\-\Desktop\txtprohlizec.exe" "%%1"
To, co psal Pytlík, já na asociaci nepoužívám. Předpokládám ale, že pokud ti to psal, tak to fungovat bude, pokud je nějaký problém s jeho skriptem, tak se obrať na něj. První možný problém ti tu už byl sdělen, že to je cmd a ne reg a druhý ti tu teď napsal Wikan.
A co se týče mě, tak ti tu klidně můžu napsat jak asociuju já, já asociuju podobně jako ten tvůj uvedený bat s reg.exe, akorát že to dělám přes Classes v HKLM a nastavuju tam třeba i ikonku (např. videosoubory mají v ikonce z mpciconlib.dll v programu MPC-HC i uvedenu příponu souboru (např. mkv má v ikonce mkv)) a jednak to dělám v instalačce i přes OEMDefaultAssociations.xml
Taký krakatoa, guru gek, by mal fičať pri desine len a len s "ladičkou" PowerShell, a nie sa paparať s dávkami a reg súbormi.
Máš v tom nejaký guláš. Rozlišuj dávky, skripty *.bat a *.cmd pre W10 ak máš x64 bit systém.
Pre jednorazovú zmenu asociácie pomocou spusteného okna cmd.exe pre PDF
(ako si zrejme v dopyte žiadal):
ASSOC .PDF=Acrobat.exe
FTYPE Acrobat.exe="C:\Program Files (x86)\Adobe\Acrobat 11.0\Acrobat\Acrobat.exe" "%%1"
Pre uložený skript *.cmd v Notepad.exe začína hlavičkou:
@echo off
--------------------------------
Pre inštalačné *.reg súbory k trvalej zmene asociácie spracované v Notepad.exe vypadá vzor takto:
https://gist.github.com/credomane/9ac7be58f562eb9ba227
Hotové predvoľby asociácií *.reg inštalačných súborov k trvalej zmene:
http://www.winhelponline.com/blog/file-association-fixes-windows-10/
Prioritně mi šlo o dávku v *.bat, to zmiňuji v zadání dotazu.
Včera jsem testoval/spouštěl jako správce/admin v *.bat níže uvedený kód, ale nebyl jsem úspěšný.
Problém je jinde. Nikdo však neví kde. Od té nesmyslné včerejší přestřelky jsem začal tušit, že všichni nevíme nějakou základní informaci, která je nutná pro rozběhutí dávky. Možná to někdo ví, asi tuším kdo, ale úplnou náhodou to sem nenapsal. Taky se pozastavuju nad tím, že by pokud dva dělají totéž na stejné platformě, tak je výsledek rozdílný. Vím, že radili chlapi zkušení a letití, proto mi hlava nebere proč se nedostavil úspěch.
Můžete mi sem napsat vaši verzi OS/bit?
Testováno na x64 Microsoft Windows [Version 10.0.10586]
-------------------------------------
@echo off
cd %systemroot%\system32
call :admin
reg.exe add "hkcr\txtfile\shell\open\command" /ve /t reg_sz /d "c:\windows\notepad.exe \"%%1\"" /f
exit
:admin
reg.exe query "hku\s-1-5-19\environment"
if not %errorlevel% equ 0 (
cls & echo Jsou nutna admin prava ...
pause & exit
)
cls
goto:eof
Máš pravdu, že to nefunguje u všech přípon/typů souborů. Některé typy jsou zřejmě už přednastavené z dřívějška, v držení nějaké jiné aplikace. Windows to mají rozeseto na X nesmyslných místech, není to na jednom místě, kde by to šlo jednoznačně změnit a fungovalo vše. například mi po aplikaci stejné dávky s assoc a s ftype (asociováno do stejného prohlížeče obrázků) u png fungovalo, ale u bmp už ne, u jp2 také ne, u ppm také ne... bylo nutno to ručně a jednotlivě donastavit po vyskočení okna "kterou aplikací to mám otevřít"... se zaškrtnutím "nafurt".
Ale mistři světa výše to zřejmě ani netuší, a tak si myslí, že je člověk blbec.
A na prvotní problém, že aplikace XYZ není v nabídce Nastavení W10 "Výchozí aplikace/Nastavit výchozí možnosti podle aplikace", jelikož se tam aplikace nevyskytuje, a jak ji tam lze doplnit, na to nereagoval nikdo.
Ještě při použití příkazového řádku jako správce, rozdílnost chování se stejným kódem:
C:\Windows\system32>c:\Users\-\Desktop\asociuj.bat
C:\Windows\system32>ftype txtfile="c:\Windows\notepad.exe" "%1"
txtfile="c:\Windows\notepad.exe" "%1"
C:\Windows\system32>assoc .txt=txtfile
.txt=txtfile
C:\Windows\system32>ftype txtfile="c:\Windows\notepad.exe" "%%1"
txtfile="c:\Windows\notepad.exe" "%%1"
C:\Windows\system32>assoc .txt=txtfile
.txt=txtfile
C:\Windows\system32>
Zábavné čtení.
Ještě bych rád autora dotazu upozornil, že je velmi zpozdilé používat profil jakéhokoli uživatele k ukládání aplikací, které se mají asociovat.
Dále je vhodné se kouknout do registrů, zda ta změna proběhla, a zda proběhla na úrovni systému (HKLM) nebo uživatele (HKCU), výsledek spojení těchto dvou registrů je vidět v HKCR. Od dob userprofile2.0 to totiž je rozděleno.
tipuju prave, ze z batky to bude ve w10 profil hkcu, kdezto ms si drzi asociaci na hkcr.
je to jedno, ja jdu pokud mozno primym zapisem do registru, i kdyz je to tak primitivni (ale ucinne).
Ja si zas myslim, ze to po 4 letech uz vyresil...
On to sice původně vytáhl 2xs 3.12., ale je zbytečné to po letech dál rozvíjet.