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....
@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