類似した名前を持つ複数のファイルを一括圧縮する

類似した名前を持つ複数のファイルを一括圧縮する

名前は同じだが拡張子が異なるファイルが複数あるフォルダーがあります。

同じファイル名を同じ名前.zip ファイルに一括圧縮したいです。
開始ファイルについて説明します。

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

ファイルは次の場所にあります。zip"C:\Batch"
ファイルがファイルと同じフォルダにあっても問題ありません。
私は以下を使用しました:

@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 つ使用すれば十分です。コーディングで何を間違えたのか理解するのに助けが必要でした。ありがとうございます。

答え1

これが必要なのかどうかを確認してください。このバッチ ファイルは、元のファイルを保持するか、元のファイルを削除するように設定できます。ソース フォルダーをバッチにドラッグ アンド ドロップする必要があります。

オリジナルを削除.gif

オリジナルを保管する.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

関連情報