我正在尝试使用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
答案 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