[ 新規に投稿する ]

ツールの整理へのコンソールアプリの追加No.10570
フリーバード さん 23/01/11 18:36 [ コメントを投稿する ]
  ツールの整理で、コンソールアプリをシンプルに登録する方法を教えていただけないでしょうか?

ファイルを展開する以下のようなコマンドを登録したいと考えています。

C:\ProgramData\chocolatey\bin\7z.exe x %1

過去の投稿を検索して

vbs:CreateObject("Shell.Application").ShellExecute "C:\ProgramData\chocolatey\bin\7z.exe","x",getNextItem(-1,1)

みたいな感じかと考えましたがうまくゆかないため
よろしくお願いいたします。
[ ]
RE:10570 ツールの整理へのコンソールアプリの追加No.10575
秀丸担当 さん 23/01/12 10:14 [ コメントを投稿する ]
  chocolateyというのはちょっとわからないですが、Program Filesにインストールされているとして、x %1でやってみたら確かにうまくいきませんでした。
作業フォルダが決まっていないためのようです。
-oを使って、以下のようにしてみたらできました。

"C:\Program Files\7-Zip\7z.exe" x -o"%d" %1

vbsでこのコマンドライン相当にするとしたら以下のようになりますが長いです。

vbs:CreateObject("Shell.Application").ShellExecute "C:\Program Files\7-Zip\7z.exe","x -o"""+getDirectory()+""" "+getItemPath(getNextItem(-1,2))

ShellExecuteは第3パラメータに作業フォルダを指定することができるので、-oを使わなくてもいけました。

vbs:CreateObject("Shell.Application").ShellExecute "C:\Program Files\7-Zip\7z.exe","x "+getItemPath(getNextItem(-1,2)),getDirectory()

もっと簡単には、コンテキストメニューの項目をボタン化する方法があります。
通常のインストーラを使ったProgram Filesへのインストールでは、zipファイルを右クリックすると、7-Zipというサブメニューができると思います。
これを直接呼ぶボタンにできます。
zipファイルを選んだ状態で、ブックマークの追加をして、パスの右側の>>ボタンから、[コマンド(コンテキストメニュー)(7)...]を選びます。
そうするとzipファイルに対するコンテキストメニューの候補が出るので、その中から選ぶとできます。
7-Zipの展開は、
js:ContextMenu("SevenZipExtract");
や、
js:ContextMenu("SevenZipExtractTo");
といったものになるようです。
7zipは代表的な展開ソフトなので、スクリプトのサンプルのところにも書いておこうと思います。

chocolateyというのはわからないですが、最近のWindowsでは、wingetというコマンドでパッケージ的にインストールできたりするみたいです。
コマンドプロンプトで、
winget install -e --id 7zip.7zip
とすると、管理者のインストールが出てきてコンテキストメニューにも追加されました。
[ ]
RE:10575 ツールの整理へのコンソールアプリの追加No.10576
フリーバード さん 23/01/12 11:06 [ コメントを投稿する ]
  詳しい解説ありがとうございます。
原因が作業フォルダだったとは、失礼しました。
簡単な方法も助かります。

複数のプログラムをまとめてインストールしたり、アップデートすることを目的にパッケージマネージャーを使っています。

chocolety
https://chocolatey.org/

scoop
https://scoop.sh/
[ ]
RE:10576 ツールの整理へのコンソールアプリの追加No.10577
フリーバード さん 23/01/12 18:34 [ コメントを投稿する ]
  処理結果の表示と画面の更新をしたかったのでスクリプトにしてみました。

// unpack.js  for Hidemaru Filer Classic

var SUCCESS = 0;
var execCommand = "cmd /c C:\\ProgramData\\chocolatey\\bin\\7z.exe x -o" + getDirectory() + " " + getItemPath(getNextItem(-1,2));
exec = new ActiveXObject("WScript.Shell").exec(execCommand);
var stdOut = exec.StdOut.ReadAll();
var stdErr = exec.StdErr.ReadAll();
var exitCode = exec.ExitCode;
exitCode === SUCCESS ? message(stdOut) : message(stdErr);
refresh(4);
[ ]

[ 新規に投稿する ]