質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Q&A

解決済

5回答

3719閲覧

lhaplusをpowershellで呼び出して、フィアルを解凍したい。

jimuma

総合スコア23

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

0グッド

0クリップ

投稿2018/09/03 13:22

前提・実現したいこと

仕事で複数のgz形式のファイルをlhaplusを使い解凍したいのですが上手くいかないので、先ずは「powershellでlhapulusを呼び出し、1つのzipファイルを解凍」したいと考えています。

ネットで調べながら進めていますが上手くいかないので詳しい人がいたら教えて下さい。
宜しくお願いします。

発生している問題・エラーメッセージ

Start-Process : 引数 'C:\work\test\test.zip' を受け入れる位置指定パラメーターが見つかりません。 発生場所 行:1 文字:14 + Start-Process <<<< -FilePath "C:\Program Files (x86)\Lhaplus\Lhaplus.exe" /od "C:\work\test\test.zip" + CategoryInfo : InvalidArgument: (:) [Start-Process]、ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand

該当のソースコード

Powershell

1Start-Process -FilePath "C:\Program Files (x86)\Lhaplus\Lhaplus.exe" /od C:\work\test\test.zip

試したこと

1,管理者権限でpowershellを起動しているのでポリシーに関するエラーは出ていません。
2,「C:\work\test」には「test.zip」ファイルを配置してあります。
3,上記に記載の通りですが、Lhaplusの実行パスは半角スペースが含まれているので「"」で囲っています。
4,コマンドプロンプトで「"C:\Program Files (x86)\Lhaplus\Lhaplus.exe" /oh C:\work\test\test.zip」とすると正しく実行出来ました。
5,「-FilePath」は記述しても削除しても同症状です。
6,オプションを省き「Start-Process -FilePath "C:\Program Files (x86)\Lhaplus\Lhaplus.exe"」だけで実行すると、lhaplusが起動します。

補足情報(FW/ツールのバージョンなど)

PSVersion 2.0
OS win7 professional

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

何を使うのが良いのかはさておき、とりあえずエラーの原因について。

PowerShellの基本として、コマンドレットにパラメータを渡したとき、パラメータを明示しない場合は「位置指定パラメーター」として解釈されます。
パラメータの区切りは半角スペースです。

powershell

1Start-Process -FilePath "C:\Program Files (x86)\Lhaplus\Lhaplus.exe" /od C:\work\test\test.zip

を実行した場合、
FilePathパラメータとして
"C:\Program Files (x86)\Lhaplus\Lhaplus.exe"
位置指定パラメーターとして
/odおよびC:\work\test\test.zipが渡されたと解釈されます。

Start-Process コマンドレットのドキュメントを見てみると、位置指定パラメータで指定できるのはFilePathパラメータ及びArgumentListパラメータです。
Positionの欄に数字が入っているものが位置指定パラメータとして使えるもので、数字の小さい順に指定されたと解釈されます。

これを踏まえて渡されたパラメータを見てみると、FilePathはすでに指定されているため、/odArgumentListパラメータに対する指定として解釈されます。
/odの時点で位置指定パラメータを使い切ってしまうため、
残った C:\work\test\test.zip を受け入れる位置指定パラメーターが見つからない
ということになります。

今回は/od C:\work\test\test.zip全体をコマンドライン引数として指定したいため、修正すると以下のような感じでしょうか。
わかりやすいように変数に分離しましたが、直接書いてしまっても大丈夫です。

powershell

1[string]$lhaplusExe = 'C:\Program Files (x86)\Lhaplus\Lhaplus.exe' 2[string]$lhaplusArgs = '/od C:\work\test\test.zip' 3Start-Process -FilePath $lhaplusExe -ArgumentList $lhaplusArgs

PowerShell 2.0なら日本語化されたヘルプがあり、量もたかがしれているのでチュートリアル部分とaboutトピックは一通り目を通しておくとよいと思います。

私が上に書いた話も about_Parameters に記載されています(リンク先は英語ですが、PowerShell 2.0には日本語ヘルプが同梱されています)。

投稿2018/09/03 14:34

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimuma

2018/09/06 13:40

有難うございます!お蔭様で意図通りに動いただけではなく、理解も深まりました!
jimuma

2018/09/06 13:41

有難うございます!お蔭様で意図通りに動いただけではなく、理解も深まりました!
guest

0

Start-Processではなく&(呼び出し演算子)を使うのはどうでしょうか。

powershell

1& "C:\Program Files (x86)\Lhaplus\Lhaplus.exe" /od C:\work\test\test.zip

投稿2018/09/04 11:13

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimuma

2018/09/06 13:39

呼び出し演算子でも出来るんですね。勉強になります。有難うございます。
guest

0

powershellにおけるStart-Processの構文は以下の通りです。

Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [<CommonParameters>]

ご質問の内容は、以下のように-ArgumentListを明示してあげることで上手く動くと思います。

ps1

1Start-Process -FilePath "C:\Program Files (x86)\Lhaplus\Lhaplus.exe" -ArgumentList "/oh", "C:\work\test\test.zip"

しかし、ArgumentList引数に渡されたstring配列はコマンド解釈の時点で単純に一つの文字列として結合されるようで、配列のままプロセスに渡されるわけではないようです。
つまり、引数部分はわざわざ「,(カンマ)」区切りのstring配列にするのではなく、以下のように引数部分も半角スペース区切りの1つの文字列にしてしまった方が良いようです。

ps1

1Start-Process -FilePath "C:\Program Files (x86)\Lhaplus\Lhaplus.exe" -ArgumentList "/oh C:\work\test\test.zip"

本件が特に問題になるのは、出力ファイル名等に半角スペースを含む場合です。
このような場合には、前述の方法では意図した通りに動いてくれません。
Windowsの仕組みに起因するようなので、後者の記述にしておく方が無難なようです。

投稿2018/09/03 14:33

Simb

総合スコア118

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimuma

2018/09/04 12:54

有難うございました! Powershellの概要を理解出来ていなかったので少し理解が困難でしたが、大変助かりました。
guest

0

PowerShell

1Start-Process -FilePath "C:\Program Files (x86)\Lhaplus\Lhaplus.exe" -ArgumentList /od,C:\work\test\test.zip

試したところ私の場合は上のコマンドで展開できました。

参考
Start-Processを使って外部プログラムの引数がうまく扱えない・・・

投稿2018/09/03 14:01

編集2018/09/03 14:05
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimuma

2018/09/04 12:55

有難うございました! 「,(カンマ)」で区切れば良かったんですね!
guest

0

CUIで実行するなら7zipかなんかで解凍したほうが良くないですか?

投稿2018/09/03 13:33

編集2018/09/03 13:35
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimuma

2018/09/04 12:55

仕事場の事情でLhaplusで解凍する必要があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問