无法使用powershell

时间:2017-10-10 16:31:25

标签: powershell

我正在尝试使用powershell解压缩以下命令 -

powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('E:\test.zip', 'E:\'); }"

我得到以下日志

'E:\test1.txt' 
already exists."
At line:1 char:53
+ & { Add-Type -A 'System.IO.Compression.FileSystem'; 
[IO.Compression.ZipFile]::Ex ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : IOException

===============================

我没有看到存档被解压缩。

更新1

E:\ test1.txt已存在于目的地。如何更改命令以覆盖文件。

更新2

PowerShell版本不支持Expand-Archive

2 个答案:

答案 0 :(得分:2)

您无法使用该方法覆盖文件。您需要阅读the documentation for ZipFileExtensions.ExtractToDirectory(source, destinationDirectoryName)

  

此方法创建指定的目录    destinationDirectoryName 如果目标目录已存在,则此方法不会覆盖它;它抛出一个IOException   例外。该方法还会创建反映的子目录   zip存档中的层次结构。如果在提取过程中发生错误,   档案仍然部分提取。每个提取的文件都有   与指定目录相同的相对路径    destinationDirectoryName ,因为它的源条目必须是归档的根目录。

如果要使用ZipFileExtensions.ExtractToDirectory()进行覆盖,则需要将文件解压缩到临时文件夹,然后将其复制/移动到所需位置。

尝试类似:

do {
    $TempFolder = Join-Path -Path $([System.IO.Path]::GetTempPath()) -ChildPath $([System.IO.Path]::GetRandomFileName());
} while ((Test-Path -Path $TempFolder));

mkdir $TempFolder | Out-Null;

[IO.Compression.ZipFile]::ExtractToDirectory('E:\test.zip',$TempFolder);

Get-ChildItem -Path $TempFolder -Recurse | Move-Item -Destination 'E:\' -Force;

rmdir $TempFolder;

请注意,此代码未经测试。

答案 1 :(得分:0)

以下是解决我的问题的原因

md E:\temp
move E:\test.zip     E:\temp
powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('E:\temp\test.zip', 'E:\temp\'); }"
del E:\temp\test.zip
move /Y E:\temp\* E:\
rd E:\temp