ファイルを解凍するために 7z.exe コマンドを実行しようとして、次のコードを実行しています。
$dir には、もちろんスペースを含むことができるzip ファイルへのパスのユーザー入力が含まれています! そして、下の $dir\temp2 は以前に作成したディレクトリです。
Get-ChildItem -path $dir -Filter *.zip |
ForEach-Object {
$zip_path = """" + $dir + "\" + $_.name + """"
$output = " -o""$dir\temp2"""
&7z e $zip_path $output
}
実行すると、7z.exe から次のようになります。
7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Processing archive: C:\test dir\test.zip
No files to process
Files: 0
Size: 0
Compressed: 50219965
$zip_path と $output から値をコピーして、独自のコマンドラインを作成すると、機能します!
例えば:
7z e "c:\test dir\test.zip" -o"c:\test output"
これで、CLI で次のコマンドを使用して、PowerShell 内で実行したときに表示される「処理するファイルがありません」という同じメッセージを再現できます。
7z e "c:\test dir\test.zip" o"c:\test output"
そのため、PowerShell が -o オプションからダッシュ文字を削除しているようです。はい、7z.exe では -o "C:\test output" ではなく -o"C:\test output" である必要があります。-o パラメータとその値の間にスペースはありません。
私は困惑しています。私は何か間違ったことをしていますか、それとも別の方法でこれを行うべきですか?