유사한 이름을 가진 여러 파일을 일괄 압축합니다.

유사한 이름을 가진 여러 파일을 일괄 압축합니다.

이름은 같지만 확장자가 다른 파일 수가 많은 폴더가 있습니다.

동일한 파일 이름을 동일한 name.zip 파일로 일괄 압축하고 싶습니다.
시작 파일을 설명하십시오:

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

파일은 "C:\Batch"
파일이 있던 폴더와 동일한 폴더에 zip이 있으면 괜찮습니다.
나는 다음을 사용했습니다 :

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

또는:

@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")

텍스트를 메모장에 붙여넣고 .bat 파일로 저장했습니다. bat 파일을 클릭하세요.
두 코드 모두 zip 폴더를 만들지 않았습니다.
작동하는 명령 하나만 사용할 필요가 없었습니다. 코딩에서 내가 뭘 잘못했는지 이해하는 데 도움을 받을 수 있었습니다. 감사해요

답변1

이것이 원하는 것인지 확인하세요. 이 배치 파일은 원본 파일을 유지하거나 원본 파일을 삭제하도록 설정할 수 있습니다. 소스 폴더를 배치로 끌어다 놓아야 합니다....

삭제원본.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

관련 정보