Ich habe die Zuordnung von Dateiassoziationen automatisiert, also die Auswahl des Programms, das eine Datei aus dem Explorer/Finder öffnet. Und ich teile das.
Zunächst das Problem. Dateien mit den benötigten Erweiterungen werden oft standardmäßig von nichts geöffnet, und wenn sie geöffnet werden, dann meist von iTunes. Unter Windows gehen notwendige Assoziationen häufig verloren, wenn Programme installiert (oder sogar deinstalliert) werden: Man löscht manchmal GIMP, und die ico-Dateien wechseln von dem gewohnten Dateibetrachter zur Standard-Fotogalerie. Warum? Wieso? Unklar… Und wenn man einen neuen Editor gefunden hat oder aus verschiedenen Gründen eine frische Installation? Und wenn man nicht alleine am Computer ist? Kurz gesagt, mit der Maus in Dialogen herumzuklicken – das ist nicht gerade ein Genuss.
Stattdessen habe ich zwei Dateien auf Dropbox gespeichert, und jetzt kann ich die Computerwelt fast im Handumdrehen in ihren gewohnten Zustand zurückversetzen. Was habe ich solange gewartet… Hier ist das Rezept für Windows und macOS.
Windows
In der Windows-Konsole Abb. 21: Ausführung der Datei VWjRF.exe geschieht dies in zwei Schritten:
ftype my_file_txt="C:Windowsnotepad.exe" "%1"
assoc .txt=my_file_txtDie Änderungen treten sofort in Kraft. Obwohl die Assoziation für einen bestimmten Benutzer festgelegt wird, müssen diese Befehle seltsamerweise mit Administratorrechten ausgeführt werden. Und nicht vergessen, das Prozentzeichen (%%1) beim Starten aus einer Batch-Datei zu verdoppeln. Die wunderbare Welt von Windows 7 Ultimate 64-bit…
macOS
In macOS kann man Assoziationen bequem mit dem Tool festlegen. Es wird installiert über brew install duti. Ein Beispiel für die Verwendung:
duti -s com.apple.TextEdit .txt "editor"Die Änderungen treten sofort in Kraft, sudo ist nicht erforderlich. Hier ist das Argument „com.apple.TextEdit“ die sogenannte „Bundle-ID“ des benötigten Programms. Das Argument „editor“ bedeutet: „editor“ zum Bearbeiten, „viewer“ zum Anzeigen, „all“ für alles.
Die „Bundle-ID“ findet man so: Wenn die Version 3 von „/Applications/Sublime Text.app“ vorhanden ist, lautet die Bundle-ID „com.sublimetext.3“, oder eine andere:
> osascript -e 'id of app "Sublime Text"'
com.sublimetext.3Getestet auf macOS Sierra.
Das endgültige Skript für Windows (.bat)
@echo off
set XNVIEW=C:Program Files (x86)XnViewxnview.exe
set SUBLIME=C:Program FilesSublime Text 3sublime_text.exe
set FOOBAR=C:Program Files (x86)foobar2000foobar2000.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 :eofDas endgültige Skript für 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 ac3Quelle: habr.com
