Powershell脚本,用于提取Cab文件内容并将文件移动到新位置

时间:2014-06-16 15:47:01

标签: powershell cab

我已经获得了14K CAB文件,每个文件包含200个文件,需要解压缩到原始位置。

不幸的是,它并不像提取到同一地点那么容易: - (

我决定使用PowerShell并使用SQL生成每个文件的单个文件位置列表,并且可以提取CAB,不幸的是它们都提取到当前位置。

我正试图将它们移到各自的位置,但我正在努力。

这是代码,我到目前为止

$shell_app=new-object -com shell.application
$CABfilename= Import-CSV "CABFileList.csv" -Header CABfilename | Foreach-object {

$zip_file = $shell_app.namespace((Get-Location).Path + "\$CABfilename")
$destination = $shell_app.namespace((Get-Location).Path)
$destination.Copyhere($zip_file.items())

$dvs = Import-csv "CABFileList.csv" -Header Path, DVSFilename | 

Foreach-object{
    Move-item $_.DVSFilename* $_.Path
}

1 个答案:

答案 0 :(得分:3)

这是一个老问题,但有人可能会发现这个答案很有用。我已经调整了今天制作的一个,从农场下载所有WSP并提取其内容。

$CABfilename = Import-CSV "CABFileList.csv" -Header CABfilename | Foreach-object {
 # Grab the Solution
$Path = $SaveLocation + $CABfilename
# Check the path is ok
$Path
# Make a copy with extension '.cab' for extraction
$DotCab = $CABfilename + ".cab"
$SolutionDir = $Dotcab -replace '.wsp.cab'
mkdir $SolutionDir
copy-item $CABfilename $DotCab
# Now extract it, assuming you have expand.exe in the filsystem (should be in everything post Server 2008 / Vista)
if(C:\Windows\System32\expand.exe)     {
    try { cmd.exe /c "C:\Windows\System32\expand.exe -F:* $Dotcab $SolutionDir"}
   catch { Write-host "Nope, don't have that, soz."}
}}