이름은 같지만 확장자가 다른 파일 수가 많은 폴더가 있습니다.
동일한 파일 이름을 동일한 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
이것이 원하는 것인지 확인하세요. 이 배치 파일은 원본 파일을 유지하거나 원본 파일을 삭제하도록 설정할 수 있습니다. 소스 폴더를 배치로 끌어다 놓아야 합니다....
@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