2009-09-02 32 views
10

Estoy creando una utilidad de copia de seguridad que comprime todos los archivos enumerados en un archivo de texto. Estoy usando MS ACCESS como mi front-end y 7-Zip para compresión. Estos son los comandos que estoy usando:7-zip commandline

7zG.exe a c:\Backup\backup.zip 
@c:\temp\tmpFileList.txt 

Todos los archivos están comprimidos sin su ruta. ¿Hay alguna forma de incluir la ruta para cada archivo en el archivo zip? Luego, cuando se extraiga backup.zip, los archivos se restaurarán a su estructura original de carpetas.

Gracias

+0

Y si logra incorporar rutas en el archivo comprimido, use rutas relativas o no podrá restaurarlas en otro lugar que no sea la ubicación original. – pavium

Respuesta

4

El programa de línea de comandos para el 7-Zip es 7z o 7za. Aquí hay un helpful post sobre las opciones disponibles. La opción -r (recurse) almacena rutas.

+0

Gracias Vinay por la respuesta .. Pero no puedo encontrar 7za.exe en mi directorio 7-zip, también 7z.exe tiene 0 bytes. Utilicé 7zG.exe porque muestra una barra de progreso de la GUI en lugar de una pantalla de DOS.El único problema es que no incluye la ruta donde se encuentra el archivo – Arnold

-1

En lugar de la opción a utilice la opción , esto creará los directorios pero solo para extracción, no compresión.

+2

No relevante; OP preguntó sobre el almacenamiento de rutas en el archivo en compresión, no en descompresión. – Fred

6

En this 7-zip forum thread, en el que muchas personas expresan su deseo por esta característica, el desarrollador de 7-zip Igor señala el FAQ question titulado "¿Cómo puedo almacenar la ruta completa del archivo en el archivo?" para lograr un resultado similar

En resumen:

  • archivos separados por volumen (una lista de archivos en C:\, uno para D:\, etc)
  • a continuación para obtener una lista de cada volumen de archivos,
    1. chdir a la directorio raíz del volumen apropiado (por ejemplo, cd /d C:\)
    2. crear un listado de archivos con rutas relativa al volumen directorio raíz de me (por ejemplo, C:\Foo\Bar convierte Foo\Bar)
    3. realizar 7z a archive.7z @filelist como antes, con esta nueva lista de archivos
    4. al extraer con rutas completas, asegúrese de hacer un chdir al directorio raíz de un volumen adecuado primera
1

No he investigado esto, pero disparando desde la cadera, diría que dejaron de dar soporte a la línea de comandos en el portátil. La razón por la que la gente no hace muchas cosas de línea de comandos en aplicaciones portátiles es que el sistema operativo (Windows en su caso) requiere que los ejecutables se agreguen a la lista de%% de% de inclusión.

Si ese requisito no se cumple utilizando las utilidades de línea de comandos es bastante tedioso.

7z -a .

sería

d: \ portátiles \ z7 \ z7 -AC:. Archivo \ carpeta \ a \ * *

escritura que fuera para que todo está por qué tiene sentido de interfaz gráfica de usuario con cosas como aplicaciones portátiles (la aplicación) puede recordar su propia ubicación y manejar esas cosas por usted y si no puede ejecutarlo, sabe que no está conectado.

Si realmente desea que la aplicación portátil contenga eso, aunque siempre puede instalar la versión completa y sacar el 7z.exe requerido y ponerlo en la carpeta portátil asegurándose de que esté con el dll requerido.

Tendrá que establecer su camino cuando toque el caparazón después de asegurarse de que está conectado.

http://www.redfernplace.com/software-projects/patheditor/ - un buen editor de ruta (útil) si tiene mucha información de ruta 20+ es difícil de leer.

http://www.softpedia.com/get/System/System-Miscellaneous/Path-Editor.shtml - fuente alternet para editor de ruta

No es conveniente modificar la ruta del sistema de temproary unidades "portátiles", aunque manualy hacer eso por:

conjunto path =% path%; "d: \ portable \ z7 \ ";

cuando se ejecuta dos o cmd.exe http://sourceforge.net/p/conemu/home/Home/

Las otras respuestas frente a otros problemas mejor que no voy a tratar ..

http://www.codejacked.com/zip-up-files-from-the-command-line/ - buena referencia para el uso de línea de comandos de z7 y z7a .

PD: perdón por el necro pero pensé que necesitaba una respuesta más directa al por qué (incluso si solo es especulativo).

0

Desde la versión 7-zip 9.25 alpha hay un nuevo conmutador -spf que se puede usar para almacenar las rutas completas de archivos, incluida la letra de la unidad al archivo.

7zG.exe a -spf c:\BAckup\backup.zip @c:\temp\tmpFileList.txt 

debería estar funcionando bien ahora.

0

7-Zip quiere rutas de acceso relativas en el archivo de lista, de lo contrario, almacenará solo los nombres de archivo, causando un error de nombre de archivo duplicado.

Suponiendo que su lista contiene los nombres completos de rutas:

  • editar el archivo de lista para eliminar el prefijo duro, C: \
  • Asegúrese de que está en la raíz de la unidad cuando se ejecuta 7Z utilizar el archivo de lista anterior.
  • Luego almacenará las rutas y no se quejará del nombre duplicado. Quiere rutas relativas en el archivo de lista.

Si su archivo de lista tiene rutas relativas a otra carpeta, debe ejecutar 7Z desde esa carpeta.

Actualización: Observé desde otra publicación anterior que el nuevo 7-Zip tiene una opción -spf que no requiere los pasos anteriores. Todavía no lo he probado, pero mis pasos son para versiones anteriores que no tienen esta opción.

Cuestiones relacionadas