Comprima por lotes varios archivos con nombres similares

Comprima por lotes varios archivos con nombres similares

Tengo una carpeta con varios archivos que tienen el mismo nombre pero con diferentes extensiones.

Quiero comprimir por lotes el mismo nombre de archivo en el mismo archivo name.zip.
Explicar los archivos de inicio:

Seth.dbf  
Seth.prj  
Seth.shp  
Seth.shx  
Go to zip:  
Seth.zip

Los archivos se encuentran en. "C:\Batch"
Estoy bien si el zip se encuentra en la misma carpeta donde se encuentran los archivos.
He usado :

@ECHO OFF
set $PATH="C:Batch\"
pushd %$path%
FOR %%F IN (*.dbj) DO 7Z a "%%~nF.zip" "%%~nF.dbf" "%%~nF.prj"  "%%~nF.shp" "%%~nF.shx"
popd
Echo Done !!!

O:

@ECHO OFF
PATH=C:\Batch
for %%e in ("*.dbj") do (%PROGRAMFILES%\7-Zip\7z.exe a "%%~ne.zip" "%%~ne.dbj" "%%~ne.prj" "%%~ne.shp" "%%~ne.shx")

Pegué el texto en el bloc de notas y los guardé como archivos .bat. Haga clic en el archivo bat.
Ambos códigos no crearon ninguna carpeta zip.
No necesitaba usar ambos comandos, solo uno que funcione. Me vendría bien la ayuda para comprender qué hice mal en la codificación. Gracias

Respuesta1

Vea si es esto lo que desea, este archivo por lotes se puede configurar para conservar los archivos originales o eliminar los archivos originales. Tienes que arrastrar y soltar la carpeta de origen en el lote....

EliminarOriginales.gif

KeepOriginals.gif

@echo off

:: Put the path to command line 7zip here:
set Seven=C:\Program Files\7-Zip\7z.exe

:: Delete original files "y" or "n"
set DOriginal=n
 
If exist "%~1" (IF not exist "%~1\" exit) else (exit)

setLocal EnableDelayedExpansion

Set "Folder=%~1"
pushd "%Folder%"

For /f "delims=" %%a in ('dir /b *.*') do IF not "%%~na"=="!OldName!" (
                                                                       set /a Counter+=1
                                                                       set "NameArray[!Counter!]=%%~na"
                                                                       set "OldName=%%~na"
                                                                      )

If /i "%DOriginal%"=="y" (goto :Delete) else (goto :Keep)

:Delete
For /L %%a in (1,1,%Counter%) do "%Seven%" a -tzip -sdel "!NameArray[%%a]!.zip" *"!NameArray[%%a]!"*
goto :End

:Keep
For /L %%a in (1,1,%Counter%) do "%Seven%" a -tzip "!NameArray[%%a]!.zip" *"!NameArray[%%a]!"*
goto :End

:End
echo  Bye
exit

información relacionada