script run how example create commands batch bat windows batch-file

windows - run - Script de archivo por lotes para comprimir archivos



windows batch file virus (8)

tengo una estructura de carpeta en este patrón. Acabo de mostrar dos subdirectorios y 2 archivos en cada uno, pero generalmente tengo n cantidad de subdirectorios en un solo nivel y un solo nivel de archivos (pero puede ser n cantidad de archivos) debajo de ellos.

Directory master subDirectory x: file1 file2 Directory y: file 3 file 4

Necesito crear un script de Windows, un archivo por lotes para ejecutar desde el directorio maestro y darme dos archivos zip x.zip y y.zip que contengan sus respectivos archivos.

Sé que mi script tiene que usar los comandos para y zip, pero me estoy volviendo loco intentando que funcione, ya que no puedo entender por la sintaxis de estos comandos, y Google no parece ayudar.

Encontré un comando como este for %f in ("*.*") do zip "%~nf.zip" "%f" pero parece estar funcionando solo si los archivos están directamente allí sin subcarpetas.


Estás cerca :)

En primer lugar, el lote (variable %%) y el CMD de Windows (variable%) utilizan diferentes nombres de variable. En segundo lugar, no entiendo cómo se usa el zip de CMD. Esto es de usuarios de Linux, creo. Usar la función de manipulación de archivos zip no es tan fácil como Win, y aún más difícil con scripts por lotes.

Pero tienes suerte de todos modos. Obtuve (extraído a la carpeta de destino) zip.exe y cygwin1.dll del paquete cygwin (archivos de tamaño de 3 mb ambos juntos) y comencé a jugar con él ahora mismo.

Por supuesto, uso CMD para realizar pruebas mejores / más rápidas en lugar de lotes. Solo recuerda modificar el% varname a %% varname antes de culparme: P

for /d %d in (*) do zip -r %d %d

Explicación: for /d ... que coincide con cualquier carpeta dentro. Solo carpeta ignorando archivos. (use para / f para filesmatch) for /d %d in ... el% d le dice a cmd qué nombre quiere asignarle a su variable. Pongo d para que coincida con widh d (significado del directorio). for /d %d in (*) ... Muy importante. Eso supone que I CD a la carpeta deseada, o ejecutar desde. (*) Esto significará todo en ESTE directorio, porque usamos /d los archivos no se procesan, por lo que no es necesario establecer un patrón, incluso si solo puede obtener algunas carpetas si es necesario. Puedes usar rutas absolutas. No estoy seguro acerca de los problemas con los parientes del lote. for /d %d in (*) do zip -r ... Do ZIP es obvio. (el zip del propio ejecutivo y ver la pantalla de ayuda para usar sus reglas personalizadas). r- es recursivo, por lo que se agregará anyting. for /d %d in (*) do zip -r %d %d El primer% d es el nombre zip . Puedes probar con myzip.zip, pero si fallará porque si tienes 2 o más carpetas el segundo no puede dar el nombre del primero y no intentarás sobrescribirlo sin más parámetros. Por lo tanto, pasamos% d a ambos, que es el nombre actual de la carpeta de iteración comprimida en un archivo con el nombre de la carpeta. No es necesario agregar ".zip" para nombrar.

Es bastante corto de lo que esperaba cuando empiezas a jugar.


for /d %%a in (*) do (ECHO zip -r -p "%%~na.zip" "./%%a/*")

debería funcionar desde dentro de un lote.

Tenga en cuenta que he incluido un ECHO simplemente para MOSTRAR el comando que se propone. Tendría que eliminar la tecla ECHO para EJECUTAR los comandos.


Prueba este código:

for /d %%a in (*) do (zip "%%~na.zip" "%%a")

Este código debe ejecutarse desde un archivo por lotes (.bat).

Mona.


Sé que es demasiado tarde, pero si todavía quieres probar

for /d %%X in (*) do (for /d %%a in (%%X) do ( "C:/Program Files/7-Zip/7z.exe" a -tzip "%%X.zip" "./%%a/" ))

aquí * es la carpeta actual. para más opciones, prueba este enlace


Sin dependencia externa en 7zip o ZIP: crea un script vbs y ejecuta:

@ECHO Zipping mkdir %TEMPDIR% xcopy /y /s %FILETOZIP% %TEMPDIR% echo Set objArgs = WScript.Arguments > _zipIt.vbs echo InputFolder = objArgs(0) >> _zipIt.vbs echo ZipFile = objArgs(1) >> _zipIt.vbs echo CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar) >> _zipIt.vbs echo Set objShell = CreateObject("Shell.Application") >> _zipIt.vbs echo Set source = objShell.NameSpace(InputFolder).Items >> _zipIt.vbs echo objShell.NameSpace(ZipFile).CopyHere(source) >> _zipIt.vbs @ECHO ******************************************* @ECHO Zipping, please wait.. echo wScript.Sleep 12000 >> _zipIt.vbs CScript _zipIt.vbs %TEMPDIR% %OUTPUTZIP% del _zipIt.vbs rmdir /s /q %TEMPDIR% @ECHO ******************************************* @ECHO ZIP Completed


Este es un enlace de Tomás que tiene una secuencia de comandos bien escrita para comprimir los contenidos de una carpeta.

Para que funcione, copie la secuencia de comandos en un archivo por lotes y ejecútelo especificando la carpeta que se va a comprimir (fuente).

No es necesario mencionar el directorio de destino, ya que está predeterminado en el script de escritorio ("% USERPROFILE% / Desktop")

Copiando el script aquí, solo en caso de que el enlace web esté caído:

@ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET sourceDirPath=%1 IF [%2] EQU [] ( SET destinationDirPath="%USERPROFILE%/Desktop" ) ELSE ( SET destinationDirPath="%2" ) IF [%3] EQU [] ( SET destinationFileName="%~n1%.zip" ) ELSE ( SET destinationFileName="%3" ) SET tempFilePath=%TEMP%/FilesToZip.txt TYPE NUL > %tempFilePath% FOR /F "DELIMS=*" %%i IN (''DIR /B /S /A-D "%sourceDirPath%"'') DO ( SET filePath=%%i SET dirPath=%%~dpi SET dirPath=!dirPath:~0,-1! SET dirPath=!dirPath:%sourceDirPath%=! SET dirPath=!dirPath:%sourceDirPath%=! ECHO .SET DestinationDir=!dirPath! >> %tempFilePath% ECHO "!filePath!" >> %tempFilePath% ) MAKECAB /D MaxDiskSize=0 /D CompressionType=MSZIP /D Cabinet=ON /D Compress=ON /D UniqueFiles=OFF /D DiskDirectoryTemplate=%destinationDirPath% /D CabinetNameTemplate=%destinationFileName% /F %tempFilePath% > NUL 2>&1 DEL setup.inf > NUL 2>&1 DEL setup.rpt > NUL 2>&1 DEL %tempFilePath% > NUL 2>&1


Esta es la sintaxis correcta para archivar individuos; carpetas en un lote como archivos individuales comprimidos ...

for /d %%X in (*) do "c:/Program Files/7-Zip/7z.exe" a -mx "%%X.zip" "%%X/*"


Un procedimiento simple es esto:

Configuración de una sola vez :

  1. Desde aquí: http://www.7-zip.org/download.html , descargue el 7zip exe (ya sea de 32 bits x86 o de 64 bits x64, según la arquitectura de su computadora)

  2. Instálalo, por ejemplo, la instalación va a "C: / Archivos de programa / 7-Zip", es decir, verás "7z.exe"

  3. AÑADIR el siguiente, al entorno PATH "C: / Program Files / 7-Zip"

Zip recursivo

  1. Crea un archivo llamado ''build.bat'', con los siguientes elementos:

    REM build.bat 7z a mycurrentfolder.zip

  2. Coloque este archivo ''build.bat'' en cualquier carpeta y haga doble clic para ejecutarlo.

Eso es todo

NOTA: Sobre el comando ''7z'', zip recursivamente (o archiva o a) todos los contenidos de la carpeta actual, y crea un archivo llamado mycurrentfolder.zip