¿Cómo puedo crear un trabajo por lotes (.bat) que comprima una carpeta?

¿Cómo puedo crear un trabajo por lotes (.bat) que comprima una carpeta?

De 7zip descargué su herramienta de línea de comandos 7za.exe y tengo el siguiente script:

echo off

cls

set zip ="C:\7za.exe"

set filename="%date%.backup.zip"

set pathtobackup="C:\MyDocs"

%zip% -t7z %filename% %pathtobackup%\*.doc

Mi intención es hacer una copia de seguridad de todos los archivos doc en la carpeta MyDocs (incluidas las subcarpetas) y colocarlos en un archivo zip con fecha. Luego moveré este archivo con robocopy a mi servidor, pero por el momento tengo algunos problemas para comprimir los archivos.

¿Alguien tiene una idea? De todos modos, ¿también puedo agregar una contraseña para el archivo?

Respuesta1

Usa la sintaxis

7z a -tzip archive.zip -r src\*.cpp src\*.h

entonces en tu caso sería

7z a -t7z %filename% -r %pathtobackup%\*.doc

Fuente:http://sevenzip.sourceforge.jp/chm/cmdline/switches/recurse.htm

Respuesta2

Instale 7z y podrá utilizar este ejemplo funcional con un script de eliminación para archivos de más de 7 días. Lo que hace este script es comprimir los archivos de la carpeta de "entrada" dada a la carpeta de "salida". Para comprimir carpetas, debe agregar /d o para comprimir todos los archivos dentro de la carpeta simplemente modifique el último "%%X".

REM This is a batch script to zip files in folder or add /d to zip folders.
REM This script is using 7z to zip files, installation is required - "[http://www.7-zip.org/a/7z938-x64.msi][1]"
REM Remember to point 'do' to 7z installed path 7z.exe

SET input1=D:\Backup\SampleFolder
SET input2=D:\Backup\SampleFolder2

SET output1=C:\ZipBackups\SampleFolder
SET output2=C:\ZipBackups\SampleFolder2

CD /d %input1%
for %%X in (*) do "C:\Program Files\7-Zip\7z.exe" a "%output1%\%%X.zip" "%%X"
FORFILES /P "%input1%" /M *.* /D -8 /C "cmd /c del @file"

CD /d %input2%
for %%X in (*) do "C:\Program Files\7-Zip\7z.exe" a "%output2%\%%X.zip" "%%X"
FORFILES /P "%input2%" /M *.* /D -8 /C "cmd /c del @file"

Respuesta3

He encontrado una solución sencilla para esto. Supongamos que tiene varias subcarpetas para comprimir en una carpeta. En ese caso, 1. Descargue e instale el software 7zip. Luego copie 7z.exe a la carpeta particular donde desea comprimir sus subcarpetas.

En un bloc de notas, copie y pegue lo siguiente y guárdelo como archivo .bat. :

cd "your_Folder_path" for /d %%f in (*) do (7z a -t7z %%f.7z "your_Folder_path\%%f")

El doble clic para ejecutar el archivo.

En caso de que desee eliminar las carpetas originales, agregue esto antes de la llave de cierre:

rd /s /q "your_Folder_path\%%f"

Respuesta4

set hour=%time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
echo hour=%hour%
set min=%time:~3,2%
if "%min:~0,1%" == " " set min=0%min:~1,1%
echo min=%min%
set secs=%time:~6,2%
if "%secs:~0,1%" == " " set secs=0%secs:~1,1%
echo secs=%secs%

set year=%date:~-4%
echo year=%year%
set month=%date:~3,2%
if "%month:~0,1%" == " " set month=0%month:~1,1%
echo month=%month%
set day=%date:~0,2%
if "%day:~0,1%" == " " set day=0%day:~1,1%
echo day=%day%

set datetimef=%day%_%month%_%year%___%hour%_%min%_%secs%

echo datetimef=%datetimef%


path %path%;"C:\Program Files\7-Zip"

información relacionada