Ik heb de taak voor bestandassociaties geautomatiseerd, dat wil zeggen de keuze van het programma dat een bestand vanuit de Explorer/Finder opent. En ik deel het.
Eerst het probleem. Bestanden met de juiste extensies worden vaak standaard niet door iets geopend, en als ze geopend worden, dan door iets als iTunes. Onder Windows gaan de vereiste associaties soms helemaal verloren bij de installatie (of zelfs het verwijderen) van programma's: je verwijdert soms GIMP, maar ico-bestanden zijn overgegaan van de gebruikelijke afbeeldingsviewer naar de standaard Foto Galerij. Waarom? Waarom? Het is onbekend... En als je een nieuwe editor gevonden hebt of om andere redenen een nieuwe installatie hebt? En als er meer computers zijn? Kortom, met de muis klikken in dialogen is niet echt een plezier.
In plaats daarvan heb ik twee bestanden op Dropbox opgeslagen en nu kan ik de computerwereld in een bijna onmiddellijke staat terugbrengen. Wat heb ik al die jaren gewacht... Hier is een recept voor Windows en macOS.
Windows
In de Windows-console cmd.exe doe je dit in twee stappen:
ftype my_file_txt="C:\Windows\notepad.exe" "%1"
assoc .txt=my_file_txtDe wijzigingen worden onmiddellijk van kracht. Hoewel de associatie voor een specifieke gebruiker wordt ingesteld, moeten deze commando's om de een of andere reden als administrator worden uitgevoerd. En vergeet niet het percentage-teken te verdubbelen (%%1) bij het uitvoeren vanuit een .bat-bestand. De magische wereld van Windows 7 Ultimate 64-bit...
macOS
In macOS kunnen associaties gemakkelijk worden ingesteld met de utility . Het wordt geïnstalleerd via brew install duti. Voorbeeld van gebruik:
duti -s com.apple.TextEdit .txt "editor"De wijzigingen worden onmiddellijk van kracht, sudo is niet vereist. Hier is het argument "com.apple.TextEdit" — dat is de zogenaamde "bundle id" van het programma dat we nodig hebben. Het argument "editor" is het type associatie: "editor" voor bewerking, "viewer" voor bekijken, "all" voor alles.
Je kunt de "bundle id" als volgt vinden: als je de derde versie van "\/Applications\/Sublime Text.app" hebt, dan is de bundle id "com.sublimetext.3", of een andere:
> osascript -e 'id of app "Sublime Text"'
com.sublimetext.3Gecontroleerd op macOS Sierra.
Eindscript voor Windows (.bat)
@echo off
set XNVIEW=C:\Program Files (x86)\XnView\xnview.exe
set SUBLIME=C:\Program Files\Sublime Text 3\sublime_text.exe
set FOOBAR=C:\Program Files (x86)\foobar2000\foobar2000.exe
call :assoc_ext "%SUBLIME%" txt md js json css java sh yaml
call :assoc_ext "%XNVIEW%" png gif jpg jpeg tiff bmp ico
call :assoc_ext "%FOOBAR%" flac fla ape wav mp3 wma m4a ogg ac3
goto :eof
:assoc_ext
set EXE=%1
shift
:loop
if "%1" neq "" (
ftype my_file_%1=%EXE% "%%1"
assoc .%1=my_file_%1
shift
goto :loop
)
goto :eofEindscript voor macOS (.sh)
#!/bin/bash
# this allows us terminate the whole process from within a function
trap "exit 1" TERM
export TERM_PID=$$
# check `duti` installed
command -v duti >/dev/null 2>&1 ||
{ echo >&2 "duti required: brew install duti"; exit 1; }
get_bundle_id() {
osascript -e "id of app "${1}"" || kill -s TERM $TERM_PID;
}
assoc() {
bundle_id=$1; shift
role=$1; shift
while [ -n "$1" ]; do
echo "setting file assoc: $bundle_id .$1 $role"
duti -s "$bundle_id" ".${1}" "$role"
shift
done
}
SUBLIME=$(get_bundle_id "Sublime Text")
TEXT_EDIT=$(get_bundle_id "TextEdit")
MPLAYERX=$(get_bundle_id "MPlayerX")
assoc "$SUBLIME" "editor" txt md js jse json reg bat ps1 cfg sh bash yaml
assoc "$MPLAYERX" "viewer" mkv mp4 avi mov webm
assoc "$MPLAYERX" "viewer" flac fla ape wav mp3 wma m4a ogg ac3Bron: habr.com
