Batch Befehl um Datei zu entpacken und sie dann kopieren und einzufügen?

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:

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Kwalliteht  04.06.2021, 23:59

Seit weggefallener DOS-Unterstützung machen CMD und BAT keinen Unterschied mehr.

Erzesel  05.06.2021, 19:53
@Kwalliteht

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...

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.

Woher ich das weiß:Berufserfahrung – arbeite seit vielen Jahren in der IT