wsl2からPDFとExcelを開く
【背景】
最近、wsl2上で作業することが多く、いちいちexplorerを開くのが面倒になったので、wsl上からPDFやExcelを開く方法がないかと調べました。
ちなみにPDFはEdgeで開くことを想定してます。
【EdgeとExcelの起動方法】
- Windowsのバージョン2004(ビルド番号19041)以降から、WSL2から直接Windowsの実行ファイルを起動できるようになりました。
- wls2から直接実行ファイルを開くことで、アプリを起動することが出来ます。
- これらのコマンドを実行する際には、実行ファイルのパスにスペースが含まれる場合はバックスラッシュ
\\
でエスケープするか、クォート"
で囲む必要となります。
<Microsoft Edgeの起動>
/mnt/c/Program\\ Files\\ \\(x86\\)/Microsoft/Edge/Application/msedge.exe
<Excelの起動>
/mnt/c/Program\\ Files\\ \\(x86\\)/Microsoft\\ Office/root/Office16/EXCEL.EXE
また、WSL2からWindowsアプリを起動する際には、cmd.exe
やpowershell.exe
を介してコマンドを実行することもで可能です。
cmd.exe /c start msedge
cmd.exe /c start excel
start
コマンドは、アプリケーションの名前を指定するだけで関連付けられた実行ファイルを起動することができるWindowsのコマンドです。
これを使用すると、パスを具体的に指定する必要がなくなります。
【EdgeからPDFを開く】
-
cmd.exe /c start msedge
を使用してPDFを開く。 - そのさい、引数にPDFファイルのパスを追加する必要があります。
例)Windowsのデスクトップにあるexample.pdf
というファイルを開く。
cmd.exe /c start msedge "C:\Users\{YourUserName}\Desktop\example.pdf"
但し、これはWindowsスタイルのパスであるため、WSL2で起動するためにLinuxスタイルのパスで実行する必要があります。
cmd.exe /c start msedge "/mnt/c/Users/{YourUserName}/Desktop/example.pdf"
※{YourUserName}
は自身のWindowsのユーザー名に置き換えてください。
【Excelファイルを開く】
-
cmd.exe /c start excel
を使用してExcelファイルを開く。 - この場合も同様に、引数にExcelファイルのパスを追加する必要がある。
例)Windowsのデスクトップにあるexample.xlsx
というファイルを開く。
cmd.exe /c start excel "/mnt/c/Users/{YourUserName}/Desktop/example.xlsx"
※{YourUserName}
は自身のWindowsのユーザー名に置き換えてください。
【フォルダパスにスペースが入っている場合】
パスにスペースが含まれている場合、cmd.exe
のstart
コマンドはパスを正しく解釈できないことがあります。
これを解決するには、パスをダブルクォーテーションで囲む必要があります。
しかし、start
コマンドは最初のダブルクォーテーションで囲まれた引数を「タイトル」として解釈するため、コマンドにダミーのタイトルを追加することが一般的な解決策です。
cmd.exe /c start "" "C:\\Path To\\Your File.pdf"
上記のコマンドで、最初のセットのダブルクォーテーションはダミーのタイトルとして機能し(ここでは空にしています)、次のダブルクォーテーションで囲まれた部分がファイルのパスになります。これにより、start
コマンドはスペースを含むパスも正しく処理します。
また、WSL2から実行する場合は、WindowsのパスをWSL2形式からWindows形式に変換する必要があります。以下の例では、WSL2のパスをwslpath
コマンドを使用して変換しています。
# WSL2のパスをWindows形式に変換
windows_path=$(wslpath -w '/mnt/c/Path To/Your File.pdf')
# PDFをMicrosoft Edgeで開く
cmd.exe /c start "" $windows_path
これらのコマンドをFishシェルの~/.bashrc
に追加するか、スクリプトとして保存して実行することができます。
【.bashrcに記載して使用できるようにする】
これまでの内容を使って、~/.bashrc
にWSL2から実行可能なスクリプトを作成します。
- 関数として作成する。
- 関数を呼び出すショートカット(alias)を作成する。
# open-excel (only windows)
open-excel() {
current_dir=$(pwd)
if [ "$1" != "" ]; then
file_path_win=$(wslpath -w "$current_dir/$1")
cmd.exe /c start excel "" "$file_path_win"
fi
}
# open-pdf (only windows)
open-pdf() {
current_dir=$(pwd)
if [ "$1" != "" ]; then
file_path_win=$(wslpath -w "$current_dir/$1")
cmd.exe /c start msedge "" "$file_path_win"
fi
}
# open-dir (only windows)
open-dir() {
current_dir=$(pwd)
file_path_win=$(wslpath -w "$current_dir/")
explorer.exe $file_path_win
}
# ショートカット
alias xls='open-excel'
alias pdf='open-pdf'
alias open='open-dir'
※私の環境では、動作確認済みのスクリプトです。
※使えるようにするには、再度WLS2を起動するか、source ~/.bashrc
を実行する必要があります。
これで、Excelを開く際はxls "{ファイル名}"
で、PDFを開く際はpdf “{ファイル名}”
で開くことが出来ます。
ちなみにopen
は、おまけでカレントディレクトリをexplorerで開くコマンドです。
このように、スクリプトを作成することでWLS2からでもWindowsのGUI上でExcelファイルやPDFファイルを開くことが出来る様になります。
Discussion