複数のファイルをスクリプトファイル上にドラッグするだけで、Windows10の.shスクリプトのパラメーターとして渡したいのですが。これは可能ですか?
Windows 10(v1607以降)は、デフォルトでこの機能を提供していません。
幸いなことに、レジストリキー(以下に提供)を使用して有効にすることができます
もちろん、このキーを使用すると、.shスクリプトをbash.exeに関連付けることができるため、スクリプトをダブルクリックするだけで済みます。
https://www.codeproject.com/Articles/1214365/Proper-Bash-scripting-on-Windows-Associate-SH-scri (更新:Ubuntu、OpenSUSE、およびレガシーインストール用の新しいアイコンオプションを追加しました)
このキーは、ユーザーモードと昇格モードでスクリプトを実行するオプションも有効にします(前者はダブルクリック、後者は右クリックオプションです)。追加の(オプションの)キーを使用すると、右クリック> nanoで編集できます。
最初にインストールする必要があることを忘れないでくださいWindows Subsystem for Linux
そしてそれをデフォルトプログラムとして設定して.shファイルを開きます(プログラムのパスはC:/Windows/System32/bash.exeです)
メインレジストリキーは次のスクリプトを実行します
#This makes bash.exe silently execute the command below (whole code)
"%SYSTEMROOT%\System32\bash.exe" -c
#Gets all file paths without expansion/substitution
read -r -d '' path_param <<'EOF'
%*
EOF
read -r -d '' path_exec <<'EOF'
%L
EOF
#Parses all dragged files' paths from Windows paths to unix paths
path_param=$(echo $path_param | tr -d '"' | sed 's/[[:space:]]\([A-Z]:\)/\n\1/g' | sed 's/[A-Z]:/\/mnt\/\L&/g' | tr '\\' '\/'\');
mapfile -t path_param <<< "$path_param";
path_param=("${path_param[@]//:}");
#Same, but with the .sh script path
path_exec=$(echo $path_exec | sed 's/[[:space:]]\([A-Z]:\)/\n\1/g' | sed 's/[A-Z]:/\/mnt\/\L&/g' | tr '\\' '\/'\');
path_exec="${path_exec//:}";
#Sets working directory to the folder where the script is located
cd "${path_exec%\/*}";
#Executes script with or without parameters
if [[ ${path_param[@]} == "" ]];
then "$path_exec";
else "$path_exec" "${path_param[@]/#${path_exec%\/*}\/}";
fi;
#Leaves WSL console open after the .sh script finishes executing
cd ~; bash;