Я выполняю следующий код, пытаясь выполнить команду 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, чтобы сформировать собственную строку cmd, это сработает!
Например:
7z e "c:\test dir\test.zip" -o"c:\test output"
Теперь я могу воспроизвести то же сообщение "нет файлов для обработки", которое появляется при выполнении в PowerShell, используя следующий cmd в cli.
7z e "c:\test dir\test.zip" o"c:\test output"
Итак, похоже, что PowerShell удаляет черту из моей опции -o. И да, это должен быть -o "C:\test output", а не -o "c:\test output" с 7z.exe, между параметром -o и его значением нет пробела.
Я в тупике. Я делаю что-то не так или я должен делать это по-другому?