У меня есть папка с несколькими файлами, которые имеют одинаковые имена, но разные расширения.
Я хочу пакетно заархивировать тот же файл с тем же именем в тот же файл 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