Batch Befehl um Datei zu entpacken und sie dann kopieren und einzufügen?
Hallo, ich möchte gerne .zip Dateien per Batch Datei entpacken und dann den entpackten in einem anderen Ordner einfügen um zu überschreiben. Und das muss mit einer .bat Datei geschehen um das dann mit der Aufgabenplanung (bei Windows vorinstalliert) automatisch zu machen. Ich habe 7-Zip auf dem Computer installiert, falls es notwendig ist + Windows 10.
Ich habe bisher nur einen Befehl geschrieben, der die neueste .zip Datei in einem anderen Ordner bewegt. Von "einfügen" ist glaub ich nichts die Rede. Wie geht das mit nem normalen Ordner? Bzw. wie muss ich meinen Befehl bearbeiten, dass man auch normale Ordner in andere Ordner kopiert und einfügt?
2te Frage noch. Beim entpacken, soll man am besten mit "hier entpacken" gehen. Normal die Datei geht zwar auch, aber dann ist da noch der Ordner anderst benannt. Und erst wenn man in den Ordner geht, sieht man die richtige Ordner Datei.
-----------------------------------------------------------------------------------
Hier noch der Befehl, den ich benutzt habe als .bat :
@echo off & setlocal
set source=STANDARDORDNER EINFÜGEN
set target=AUSGABEORDNER EINFÜGEN
for /f "delims=" %%a IN ('dir /B /S /A-D /O-D "%source%\*.bkf"') DO @(copy "%%a" "%target%" & goto :end)
:end
-----------------------------------------------------------------------------------
Falls es schwer verständlich ist, könnte ich auch ein kurzes Bild mit Gimp zeichnen und hier hochladen. Um zu zeigen was ich meine. Danke schonmal für die Antwort.
2 Antworten
Hiiilfeeee 😱 ich könnte schreien... Wir haben 20 Jahre Windows als eigenes Betriebssystem und noch immer verwendet jeder Anfänger die schrottige Extension .bat....💩😬
Die Endung .bat sollte unter Windows nicht mehr verwendet werden. Windows-Batch hat die Extension .cmd.
Der Unterschied in der Verwendung des Errorstatus ist zwar für Anfänger marginal, aber es gehört zum guten Stil für Batch-Dateien generell unter Windows die Endung .cmd zu verwenden. https://stackoverflow.com/questions/148968/windows-batch-files-bat-vs-cmd
.bat ist eine Extension aus DOS-Zeiten! Ab in den Mülleimer der Geschichte.
Nun zu Deiner Batch:Im einfachsten Fall und ohne Fremdprogramme...
Demo.cmd
set "myZip=C:\Users\Erzesel Secure\Desktop\demo.zip"
set "destinationFolder=%cd%\bubb"
rem entpacke Zip-Datei direkt in den Zielordner
powershell "Expand-Archive '%myZip%' '%destinationFolder%' -force"
pause
Wenn es denn sein muss, das erstmal in einen ZwischenOrdner entpackt werden soll, um dann zu kopieren:
domo2.cmd
set "myZip=C:\Users\Erzesel Secure\Desktop\demo.zip"
set "destinationFolder=%cd%\blubb"
rem optional:
rem erzeuge einigermaßen einzigartige Kennung aus Zeit und einer Zufallszahl
rem wenn Du am Ende Den temporären Unzipordner nicht löschen möchtest wäre es blöd wenn immer in den gleichen Ordner entpackt wird und da noch alte Dateien rumlungern 🤮
for /f "tokens=1-4 delims=:," %%a in ("%time%%random%") do (
set "UIStamp=%%a%%b%%c%%d"
call set "UI=%%UIStamp: =0%%"
)
rem bastle temporären Ordnernamen
set "myUnzipFolder=%temp%\UnZip%UIStamp%"
echo entpacke nach: "%myUnzipFolder%"
rem in unseren UnzipOrdner entpacken...
powershell "Expand-Archive '%myZip%' '%myUnzipFolder%' -force"
rem Inhalt des UnzipOrdners zum Ziel kopieren
xcopy "%myUnzipFolder%\*" "%destinationFolder%\*" /fecy
rem optional lösche temporären Unzipordner
rd /s /q "%myUnzipFolder%"
pause
Ich habe keien Ahnung was Du mit Deiner 2. Frage meinst... "Hier entpacken" meinst
Da die Batch ja automatisch laufen soll, wäre ein Ordnerdialog wohl unangebracht, ...aber was soll's...
demo3.cmd
set "myZip=C:\Users\Erzesel Secure\Desktop\demo.zip"
rem hier Defaultordner für Dialog festlegen sollte bereits existieren, dann wird er auch im Dialog vorselektiert
rem hier der aktuelle Ordner
set "destinationFolder=%cd%"
for /f "tokens=*" %%a in ('powershell "Add-Type -a System.Windows.Forms;$folder=New-Object System.Windows.Forms.FolderBrowserDialog;$folder.SelectedPath='%destinationFolder%';$null=$folder.ShowDialog();$folder.SelectedPath"') do (
rem Batchvariable ggf. mit neuer Auswahl überschreiben
set "destinationFolder=%%~a"
)
echo Ausgewaehlter Zielordner: "%destinationFolder%"
powershell "Expand-Archive '%myZip%' '%destinationFolder%' -force"
pause
Glossar:
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.archive/expand-archive?view=powershell-5.1
- https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.folderbrowserdialog?view=net-5.0
- https://ss64.com/nt/xcopy.html
- https://ss64.com/nt/rd.html
- https://ss64.com/nt/for_cmd.html
- https://ss64.com/nt/call.html
- https://ss64.com/nt/set.html
dann speichere mal das folgende als .at und .cmd und führe es aus.
@echo off
call :func && (
echo .cmd
)||(
echo .bat
)
pause
exit /b
:func
rem hier wird ein Fehler getriggert
md;2>nul
rem set ist Fehlerfrei (in .cmd wird der Errorlevel, zurückgesetzt in .bat nicht!)
set var=1
Für einen 0815gelegenheitsbatcher wird es keinen Unterschied machen, Für einen Administrator welcher welcher in seien Batches mit Fehlerbehandlung arbeitet, macht der Bug einen riesigen Unterschied.
Die Endung .bat sollte nicht mehr verwendet werden.
und nun gut damit... ich hab Urlaub...
kein Unterschied: https://wichtig.goip.de/s/Qi2ZsLtnfMpLnYk/preview
Muss es denn wirklich unbedingt eine bat-Datei sein? Mit der PowerShell wäre das deutlich einfacher zu lösen und die kann man auch über den Aufgabenplaner starten.
Seit weggefallener DOS-Unterstützung machen CMD und BAT keinen Unterschied mehr.