Ich habe einen Ordner mit mehreren Dateien, die zwar den gleichen Namen, aber unterschiedliche Erweiterungen haben.
Ich möchte den gleichen Dateinamen in eine gleichnamige ZIP-Datei stapelweise komprimieren.
Erläuterung der Startdateien:
Seth.dbf
Seth.prj
Seth.shp
Seth.shx
Go to zip:
Seth.zip
Die Dateien befinden sich unter. Für "C:\Batch"
mich ist es ok, wenn sich die Zip-Datei im selben Ordner befindet wie die Dateien.
Ich habe Folgendes verwendet:
@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 !!!
Oder:
@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")
Ich habe den Text in den Editor eingefügt und als .bat-Dateien gespeichert. Klicken Sie auf die Bat-Datei.
Beide Codes haben keine Zip-Ordner erstellt.
Ich musste nicht beide Befehle verwenden, nur einen, der funktioniert. Ich könnte Hilfe gebrauchen, um herauszufinden, was ich beim Codieren falsch gemacht habe. Danke
Antwort1
Prüfen Sie, ob es das ist, was Sie möchten. Diese Batchdatei kann so eingerichtet werden, dass die Originaldateien erhalten bleiben oder gelöscht werden. Sie müssen den Quellordner per Drag & Drop in die Batchdatei ziehen.
@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