para - ¿Cómo comprimir solo archivos y no la jerarquía de ruta completa con DotNetZip en powershell?
comprimir una carpeta con cmd (2)
Estoy tratando de comprimir el registro usando DotNetZip y powershell. Los archivos están en C: / user / temp / logs Cuando recorro los registros en el directorio y los agrego al archivo zip, termino con la jerarquía de carpetas y los archivos de registro cuando solo quiero los archivos de registro.
Así que la cremallera termina conteniendo:
-user
└temp
└logs
└log1.log
log2.log
log3.log
Cuando quiero que el archivo zip contenga es:
log1.log
log2.log
log3.log
Aquí está el script que estoy ejecutando para probar con:
[System.Reflection.Assembly]::LoadFrom("c:///User//bin//Ionic.Zip.dll");
$zipfile = new-object Ionic.Zip.ZipFile("C:/user/temp/logs/TestZIP.zip");
$directory = "C:/user/temp/logs/"
$children = get-childitem -path $directory
foreach ($o in $children)
{
if($o.Name.EndsWith(".log")){
$e = $zipfile.AddFile($o.FullName)
}
}
$zipfile.Save()
$zipfile.Dispose()
Hay un AddFile donde puede anular el nombre de archivo en el archivo:
public ZipEntry AddFile(
string fileName,
string directoryPathInArchive
)
fileName ( String )
El nombre del archivo a añadir. El nombre del archivo puede ser una ruta relativa o una ruta completamente calificada.
directoryPathInArchive ( String )
Especifica una ruta de directorio para utilizar para anular cualquier ruta en el nombre de archivo. Esta ruta puede, o no, corresponder a un directorio real en el sistema de archivos actual. Si los archivos dentro del archivo zip se extraen posteriormente, esta es la ruta utilizada para el archivo extraído. Al pasar null (Nothing en VB) se usará la ruta en el nombre de archivo, si existe. Al pasar la cadena vacía ("") se insertará el elemento en la ruta raíz dentro del archivo.
Prueba esto:
$e = $zipfile.AddFile($o.FullName, $o.Name)
También es posible que esto haga lo que quieras:
$e = $zipfile.AddFile($o.FullName, "")
No probado, pero creo que esto debería funcionar.
[System.Reflection.Assembly]::LoadFrom("c:///User//bin//Ionic.Zip.dll");
$zipfile = new-object Ionic.Zip.ZipFile("C:/user/temp/logs/TestZIP.zip");
$directory = "C:/user/temp/logs/"
set-location $directory
$children = get-childitem *.log
foreach ($o in $children)
{
$e = $zipfile.AddFile($o.Name)
}
}
$zipfile.Save()
$zipfile.Dispose()