12

次のコマンドを使用して、7-Zip を呼び出してフォルダーを圧縮する Powershell コマンドを実行しようとしています。

$command = $SevenZip + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
Invoke-Expression $command

$command に入力される変数は既に設定されており、$SevenZip は "c:\Program Files\7-Zip\7z.exe" です。

これは機能していません。Powershell から 7-Zip を呼び出す最善の方法を見つけようとしています。アイデア?

4

7 に答える 7

25

私は以前に同じ問題を抱えていました。これは、私が現在使用しているバックアップ スクリプトから (ほぼ) そのままのコードです。

[string]$pathToZipExe = "C:\Program Files\7-zip\7z.exe";
[Array]$arguments = "a", "-tgzip", $outputFilePath, $inputFilePath;

& $pathToZipExe $arguments;

call 演算子で引数配列を使うのが癖になってしまいましたが、他の方法よりもロバストなようです。

于 2009-12-18T21:58:46.330 に答える
6

Invoke-Expression を使用する必要はありません。呼び出し (呼び出し) 演算子&を使用して、実行するコマンドを指定する文字列を呼び出すだけです。この場合、パラメーターを別々に保持する必要があることに注意してください。つまり、文字列 SevenZip は、EXE へのパスにする必要があります。

&$SevenZip a "$targetDirForZip$GetDateName_$($dir.Name).7z" $dir.FullName
于 2009-12-16T20:54:35.053 に答える
4

実際には Invoke-Expression は必要ありません。次のようなアンパサンドを使用して、コマンドを簡単に呼び出すことができます。

&$Command

ただし、実行しようとしている内容により適した Start-Process コマンドレットもあります。上記の文字列としてコマンドを実行すると、$SevenZip にスペースが含まれていて引用符で囲まれていない場合、エラーが発生しやすくなります。代わりに、次を使用します。

Start-Process $SevenZip "...rest..."
于 2009-12-16T20:41:48.667 に答える
3

私もこの問題に遭遇しました。ここに私の解決策があります。

invoke-expression "& 'C:\Program Files\CIESetupClient\Staging\ffd4bc34-52c1-43e7-92d4-93d2f59d7f52\vstor_redist.exe' /q /norestart /log c:\Logs\VSTOR_Redist.log "

exe を指す一重引用符の外にパラメーターを残すことができました。これはおそらく、invoke-expression を使用してパラメーターを使用して exe を呼び出す最も簡単な方法だと思います。

于 2015-01-13T21:24:56.747 に答える
1

「c:\Program」を呼び出そうとしているのではないでしょうか。

PS の正しい構文はわかりませんが、そのスペースについて何かをする必要があります。

于 2009-12-16T20:42:36.500 に答える
0

私のために働く:

$command = "& ""$SevenZip""" + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName

Write-Host "Running: $command"

Invoke-Expression $command
于 2014-02-03T17:52:30.673 に答える
0

Windows PowerShell スクリプト内から MS-DOS コマンドを使用することもできます。

コマンドを並行して開始できる CMD.exe の START コマンドが大好きです。

7-zip を開始するには、Powershell スクリプトに次のコマンドを追加します。

    cmd.exe /c start <your 7-zip command like in MS-DOS> 
于 2015-05-25T06:25:37.297 に答える