froschkoenig-lr
Goto Top

Batch - Datei entpacken mit übergebenen Argument und umbenennen

Guten Morgen,

ich beise mir gerade die Zähne an einem Batch-Quellcode aus, kann mir jemand weiterhelfen?

Ablauf:
Es wird ein Argument beim ausführen der Batch mitgegeben, z.B über cmd.exe.:
C:\Test.bat D:\Dir1\Dir2\Testfile-local.rar

Das entpacken in das vorherige Verzeichnis "Dir1" funktioniert, allerdings soll nur der Name der entpackten Datei mit dem Verzeichnisname (in diesem Fall "Dir2") umbenannt werden und das funktioniert noch nicht.

In der letzten Zeile muss der Hund begraben liegen.

@echo off & setLocal
set RARPATH=D:\WinRAR

for %%i in ("%~1\..") do set "Pfad=%%~dpi"  
for %%i in ("%~1") do set "DateiPfad=%%~dpi"  
for %%i in ("%~1") do set "DateiEndung=%%~xi"  
for %%i in ("%~1") do set "DateinameMitEndung=%%~nxi"  
for %%i in ("%~1") do set "DateinameOhneEndung=%%~ni"  

set PfadRen=%DateiPfad%
set PfadRenShort=%PfadRen:~0,-1%
for %%f in (%PfadRenShort%) do set RenFolder=%%~nxf
for %%f in (%Pfad%%DateinameOhneEndung%%DateiEndung%) do set DateiEndungRen=%%~xf

"%RARPATH%\unrar.exe" x %DateiPfad%%DateinameMitEndung% %Pfad%  

for /r %%a in (%Pfad%%DateinameOhneEndung%) do (if "%%~na"=="%DateinameOhneEndung%" ren %Pfad%%DateinameMitEndung% %Pfad%%RenFolder%%DateiEndungRen%)  

Vielen Dank. face-smile

SG

Content-Key: 506309

Url: https://administrator.de/contentid/506309

Printed on: April 24, 2024 at 01:04 o'clock

Member: joehuaba
joehuaba Oct 18, 2019 updated at 06:08:31 (UTC)
Goto Top
Guten Morgen @Froschkoenig-LR,

wäre es nicht viel einfacher dein Vorhaben mit PowerShell umzusetzen?

ZIP-Entpacken ganz einfach:
https://www.itnator.net/zip-entpacken-per-powershell-so-funktionierts/

Datei umbenennen ganz einfach:
Rename-Item -Path "c:\directory\OLD-FILE-NAME.txt" -NewName "NEW-FILE-NAME.txt"  

Parameter übergeben ganz einfach:
param (
[String]$var1="1",  
[String]$var2="2"  
)
echo $var1
Member: Froschkoenig-LR
Froschkoenig-LR Oct 18, 2019 at 07:28:27 (UTC)
Goto Top
Hallo joehuaba,

danke für deine Antwort.

wäre es nicht viel einfacher dein Vorhaben mit PowerShell umzusetzen?

Naja, wenn man Powershell kennt bestimmt.

Ich würde es bevorzugen die Batch zu verwenden, es funktioniert lediglich das umbenennen der extrahierten Datei nicht.

SG
Member: Froschkoenig-LR
Froschkoenig-LR Oct 21, 2019 at 21:15:42 (UTC)
Goto Top
Guten Abend,

nach zahlreiche erfolglose Versuche wende ich mich noch einmal an euch.

Gibt es keine Lösungsansätze um die entpackte Datei umzubenennen?

Vielen Dank.
Member: joehuaba
joehuaba Oct 22, 2019 at 06:04:45 (UTC)
Goto Top
Was genau funktioniert denn nicht?

Benennt er sie nicht richtig, oder macht er einfach gar nichts?
Du hast leider nichts genaues zu deinem Problem geschrieben.
Member: Froschkoenig-LR
Froschkoenig-LR Oct 22, 2019 updated at 12:41:32 (UTC)
Goto Top
Guten Morgen joehuaba,

ich habe diese Batch im Internet gefunden und getestet:

@echo off
for %%i in ("%~1\..") do set "Name=%%~nxi"  
for %%i in ("%~1\..\..") do set "Directory=%%~nxi"  
D:\WinRAR\UnRar.exe x %~1 %~d1\%Directory%\
ren %~d1\%Directory%\%~n1 %Name%

Der Ablauf wie oben erwähnt:
Es wird ein Argument beim ausführen der Batch mitgegeben, z.B über cmd.exe.:
C:\Test.bat D:\Dir1\Dir2\dir2.rar

Das entpacken in das vorherige Verzeichnis "Dir1" funktioniert, allerdings soll nur der Name der entpackten Datei mit dem Verzeichnisname (in diesem Fall "Dir2") umbenannt werden und das funktioniert nicht.

Habe nun festgestellt, dass über die Zeile
ren %~d1\%Directory%\%~n1 ...
nach dem "Archivnamen" gesucht wird, wobei der Name der entpackten Datei benötigt wird.
Member: joehuaba
joehuaba Oct 22, 2019 at 13:30:45 (UTC)
Goto Top
In der Zeile 4 entpackst du die .zip Datei, beziehungsweise die .rar Datei.
In der Zeile 5 möchtest du das Verzeichnis umbenennen, welches den Namen der entpackten Datei haben soll.
Habe ich das richtig verstanden?

Wenn es so ist kann das nicht funktionieren, da du den Namen der entpackten Datei derzeit noch nicht hast.
Du musst also nach dem Entpacken (Zeile 4) noch den Namen der entpackten Datei ermitteln.
Danach kannst du umbenennen (Zeile 5) face-smile
Member: Froschkoenig-LR
Froschkoenig-LR Oct 22, 2019 updated at 15:02:47 (UTC)
Goto Top
In der Zeile 4 entpackst du die .zip Datei, beziehungsweise die .rar Datei.
In der Zeile 5 möchtest du das Verzeichnis umbenennen, welches den Namen der entpackten Datei haben soll.
Habe ich das richtig verstanden?

Genau so soll der Ablauf sein.


Wenn es so ist kann das nicht funktionieren, da du den Namen der entpackten Datei derzeit noch nicht hast.
Du musst also nach dem Entpacken (Zeile 4) noch den Namen der entpackten Datei ermitteln.
Danach kannst du umbenennen (Zeile 5) face-smile

Das habe ich mir fast gedacht und auch schon getestet in der Mittagspause...nur funktioniert hat es noch nicht... face-wink
Mir ist nicht klar, wie ich die neue extrahierte Datei von anderen enthaltene Dateien in dem Verzeichnis unterscheiden kann.
Member: joehuaba
joehuaba Oct 23, 2019 at 05:59:50 (UTC)
Goto Top
Mir ist nicht klar, wie ich die neue extrahierte Datei von anderen enthaltene Dateien in dem Verzeichnis unterscheiden kann.

Zur Not die Datei wo anders hin entpacken und danach wieder verschieben - oder wie auch immer.
Es gibt viele Möglichkeiten face-smile
Member: Froschkoenig-LR
Froschkoenig-LR Oct 23, 2019 updated at 16:56:01 (UTC)
Goto Top
Zur Not die Datei wo anders hin entpacken und danach wieder verschieben - oder wie auch immer.
Es gibt viele Möglichkeiten face-smile

Das ist mir durchaus bewusst, nur die passende zu finden...

Hab mich gestern Abend nochmal drangesetzt aber nicht mit Erfolg.

Ich finde zwar die neuste Datei, umbenannt wird diese auch aber nur wenn sie kleingeschrieben ist. (Der Verzeichnisname aus dem dearchiviert wird ist teilweise mit Großbuchstaben.)
Es kann aber auch ein völlig anderer Dateiname vorkommen, dann klappt das umbenennen nicht mehr...

Hier mein Batchinhalt:
@echo on &setlocal
for %%i in ("%~1\..") do set "Name=%%~nxi"  
for %%i in ("%~1\..\..") do set "Directory=%%~nxi"  

D:\WinRAR\unrar.exe x %~1 %~d1\%Directory%\

pushd "%~d1\%Directory%" ||goto :eof  
for /f "delims=" %%a in ('dir /a-d /b /od "*.pdf" "*.xls"') do set "newestFile=%%~na"  
ren "%~d1\%Directory%\%newestFile%.*" "%Name%.*"  
popd

Kannst du dir vorstellen was falsch dran ist?
Member: joehuaba
joehuaba Oct 23, 2019 at 12:38:33 (UTC)
Goto Top
Leider kenn ich mich mit Batch Befehlen nicht so aus, da müsste ich mich jetzt eindenken.
Sry.
Aber ich hoffe ich konnte dir trotzdem (zumindest ein bisschen) weiterhelfen.
Member: Froschkoenig-LR
Froschkoenig-LR Oct 23, 2019 at 14:33:49 (UTC)
Goto Top
Aber ich hoffe ich konnte dir trotzdem (zumindest ein bisschen) weiterhelfen.

Ich bin zumindest ein Schritt weiter, Geduld ist gefragt. 😉

Dir ein Dankeschön.

Vielleicht findet sich noch jemand der mich zum Fehler hinführen kann.
Aber auch ein überarbeiteter Code würde dankend entgegengenommen werden, ist etwas zusammengewürfelt ohne Struktur, das geht sicherlich noch anschaulicher. 😊