使用PowerShell zing用特定的文件名来z缩放文件



我有一组文件,命名为:20161205_ABC,20161205_BCD,20161205_CDE,20161206_ABC,20161204_ABC。

我有一个脚本,可以将所有具有名称的文件缩减为:20161205*。

Add-Type -assembly 'System.IO.Compression'
[string]$zipFN = 'u:usersriteshthakurdesktopmyZipFile.zip'
[string]$fileToZip = 'u:usersriteshthakurdesktopabc20161205*.txt'
[System.IO.Compression.ZipArchive]$ZipFile = [System.IO.Compression.ZipFile]::Open($zipFN, ([System.IO.Compression.ZipArchiveMode]::Create))
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($ZipFile, $fileToZip, (Split-Path $fileToZip -Leaf))
$ZipFile.Dispose()

这引发错误:"异常调用" create entryfromfile"," 3"参数:"路径中的非法字符"。在u: users riteshthakur desktop zip.ps1:7 char:1 [system.io.compression.zipfileextensions] :: createentryfromfile($ zipfile,$ fileto ..."

请帮助。

因为 *不是接受的字符。您可以用get-childitem和过滤器替换$ filestozip,然后用foreach迭代这些值。

Add-Type -assembly 'System.IO.Compression'
Add-Type -assembly 'System.IO.Compression.FileSystem'
[string]$zipFN = 'c:tempmyZipFile.zip'
$filesToZip = (Get-ChildItem -Path "c:temp" -Filter test.*).fullname
[System.IO.Compression.ZipArchive]$ZipFile = [System.IO.Compression.ZipFile]::Open($zipFN,([System.IO.Compression.ZipArchiveMode]::Create))
foreach ($fileToZip in $filesToZip) {
    [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($ZipFile, $fileToZip, (Split-Path $fileToZip -Leaf))
}
$ZipFile.Dispose()

在powershell v5中,您可以像这样做:

$zipFN = 'u:usersriteshthakurdesktopmyZipFile.zip'
$fileToZip = 'u:usersriteshthakurdesktopabc20161205*.txt'
gci $fileToZip -File | Compress-Archive -DestinationPath $zipFN -Update

我喜欢保留文件夹结构。您必须处于要划线的目录以上的目录才能工作。

# myzip.ps1   
# example "ls -r foo | .myzip foo.zip
# doesn't zip empty folders
Param([parameter(ValueFromPipeline=$True)]$file, 
  [parameter(position=0)]$zipfile)
Begin {
  if (test-path $zipfile) {
    'zipfile exists'
    exit 1
  }
  Add-Type -AssemblyName 'system.io.compression.filesystem'
  # update or create                                                            
  $zip = [System.IO.Compression.ZipFile]::Open($zipfile,'create')
}
Process {     
  # "test-path $file pathtype leaf" doesn't work right       
  if ($file | test-path -pathtype leaf) {
    $rel = $file | resolve-path -relative
    $rel = $rel -replace '^.\','' # take . off front                         
    $rel = $rel -replace '^./',''  # osx take ./ off front
    # destination, sourcefilename, entryname, compressionlevel                  
    [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zip,
      $rel, $rel, 'optimal')
  } elseif ($file | test-path -pathtype container) {
    "$file is container"
  } else {
    "$file is unknown"
  }
}
End {
  $zip.dispose()
}

最新更新