hausen
Goto Top

Unbekannten Ordnernamen einlesen

Hallo zusammen,

ich habe eine batch-Datei (OhneQuellen.bat) geschrieben die im Verzeichnis (Rechte Maustaste - Senden an) liegt .

Dies hat folgenden zweck:

- ich klicke eine x-beliebige zip-Datei auf meinem Rechner über "Rechte Maustaste - Senden an - OhneQuellen.bat" an

z.B.: D:\Projekte\0705010 Kunde 1.zip

- Diese Datei soll dann ins Verzeichnis "D:\Projekte\Sonstige Arbeiten\Temp\OhneQuellen\" entpackt werden

Was dann wie folgt aus sieht:

D:\Projekte\Temp\OhneQuellen\0705010 Kunde 1\Ordner 1
D:\Projekte\Temp\OhneQuellen\0705010 Kunde 1\Test 1
D:\Projekte\Temp\OhneQuellen\0705010 Kunde 1\Sonstiges
usw.

- In dem Ordner 0705010 Kunde 1 soll nun der Ordner "Test 1" mit Unterordnern und Dateien gelöscht werden.
- Dann soll der Ordner "0705010 Kunde 1" wieder gezippt werden zu "0705010 Kunde 1 ohne Quellen.zip"
- Und in das Verzeichnis verschoben werden aus dem die original Datei kommt also nach "D:\Projekte\"

Jetzt zu meinem Problem:

Wenn die Datei entzippt wird, weiss ich nicht wie der neu entstandene Ordner heisst da dieser nicht immer gleich dem Namen der zip-Datei ist.
Kann man diesen Ordnernamen (in meinem Beispiel der Ordner "0705010 Kunde 1") einlesen und in der Batchdatei verwenden? Und wenn ja wie?

Danke und Gruss Hausen

Content-Key: 104290

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

Printed on: April 19, 2024 at 10:04 o'clock

Mitglied: 60730
60730 Dec 17, 2008 at 15:26:03 (UTC)
Goto Top
Servus,

ich habe eine batch-Datei (OhneQuellen.bat) geschrieben
Aha - kannst du uns die zur Verfügung stellen - oder sollen wir das rad von vorne erfinden?

Hintergrund - wenn ich deine Frage richtig interpretiere.

Wenn du schon beim anlegen der Zip den Ursprungs Pfad berücksichtigst - ist das entpacken und damit das herausfinden, woher die Zips Stammen - "einfacher".

Gruß
Member: bastla
bastla Dec 17, 2008 at 15:59:57 (UTC)
Goto Top
Hallo Hausen und willkommen im Forum!

Die "billigste" Lösung wäre wohl, einen temporären Ordner (in dem sich nach dem Entzippen dann nur die Daten dieses einen Kunden befinden können) zu verwenden, und von diesem Ordner aus das restliche Handling vorzunehmen.

Den Kundenordner findest Du über
for /d %%i in ("D:\TempOrdner\*.*") do set "Ordner=%%i"
Grüße
bastla
Member: Hausen
Hausen Dec 23, 2008 at 08:13:06 (UTC)
Goto Top
Hallo Bastla,

entschuldige das ich mich erst jetzt wieder melde, aber ich war beruflich unterwegs.
Hier mal meine Batch:


Title=Projekt ohne Quellen speichern

:: Datei entzippen
set Quelle=%1
Set Ziel="D:\Projekte\Sonstige Arbeiten\Temp\OhneQuellen"

C:\Programme\WinZip\Wzunzip.exe -d %Quelle% %Ziel%

:: Ordnernamen ermitteln
for /d %%i in (%Ziel%\*.*) do set "Projektname=%%i"

:: Quellen löschen
rmdir /s /q "%Projektname%\s7asrcom"

:: Datei zippen
set Quelle="%Projektname%\*.*"
Set Projektname_Neu="%Projektname% Kunde"

C:\Programme\WinZip\wzzip.exe -a -ex -r -P %Projektname_Neu% %Quelle%

:: Entzipptes Programm löschen
rmdir /s /q "%Projektname%"


Es klappt jetzt aus so weit, nur habe ich nun das Problem, das wenn ich die zum Schluß gezippte Datei wieder entzippe, das diese dann den kompletten Pfad enthält.

z.B.: Die Datei die gezippt werden soll heisst : "0705010 Kunde 1"

Dann erzeugt die Batch auch die Datei "0705010 Kunde 1.zip" nur wenn ich diese dann entpacke sieht es dann so aus:

Projekte\Sonstige Arbeiten\Temp\OhneQuellen\0705010 Kunde 1.

Das liegt halt daran, as beim ermitteln des Ordnernamens der ganze Pfad eingelesen wird. Ich müsste aber nur den einzelnen Ordnernamen wissen.

Wie muss ich den Befehl dann abändern?

Gruss Hausen
Member: bastla
bastla Dec 23, 2008 at 16:30:34 (UTC)
Goto Top
Hallo Hausen!

Da ich kein WinZip verwende, kann ich Dir leider die entsprechende Option nicht nennen - es könnte "-pr" oder etwas in der Art sein (für WinRAR wäre es zB "-ep" für "Exclude paths from names").

Du solltest den entsprechenden Schalter aber durch Aufruf der Online-Hilfe über zB
wzzip /?
oder
wzzip -help
selbst herausfinden können ...

Grüße
bastla
Member: Hausen
Hausen Jan 05, 2009 at 07:43:46 (UTC)
Goto Top
Hallo bastla,

das neue Jahr hat begonnen, also mit neuem Elan an alte Probleme.

Das mit dem wzzip klappt ja soweit, nur bei dem Befehl

for /d %%i in (%Ziel%\*.*) do set "Projektname=%%i"

wird der komplette Pfad eingelesen:

"Projekte\Sonstige Arbeiten\Temp\OhneQuellen\0705010 Kunde 1"

was ich benötige ist aber nur der letzte Ordnername, also:

"0705010 Kunde 1"

Kann ich den Befehl irgendwie abändern?

Gruss Hausen
Member: Biber
Biber Jan 05, 2009 at 09:12:42 (UTC)
Goto Top
Moin Hausen,
Kann ich den Befehl irgendwie abändern?
Jepp, sogar zweifach.

Erstens, bitte die geeignete (hier: die Code-)Formatierung benutzen wie beschrieben.
Zweitens, die Zeile wie folgt abändern:
for /d %%i in (%Ziel%\*.*) do set "Projektname=%%~nxi"  

Dadurch wird nur der Name des "letzten" Ordners übernommen.

Grüße
Biber
Member: bastla
bastla Jan 05, 2009 at 10:59:25 (UTC)
Goto Top
@Biber: Danke face-smile

@Hausen: Da war ich leider zu sehr auf "gezippte Datei" und "kompletten Pfad" fokussiert (was besser klingt, als:
Den Satz "Ich müsste aber nur den einzelnen Ordnernamen wissen." habe ich glatt übersehen ... face-wink)

Grüße
bastla
Member: Hausen
Hausen Jan 05, 2009 at 13:08:53 (UTC)
Goto Top
Hallo zusammen,

danke ersteinmal für Euere antworten. Soweit funktioniert es jetzt auch.
Das Problem lag aber doch beim wzzip. Die Zeile muss wie folgt heißen:

 

:: Datei zippen
set Quelle="%Projektname%\*.*"  
Set Projektname_Neu="%Projektname% Kunde"  

C:\Programme\WinZip\wzzip.exe -a -ex -r -p %Projektname_Neu% %Quelle%


also mit einem kleinem "-p" !!

Habe aber noch eine Frage face-smile

Ich übergebe der Batchdatei ja über "Rechte Maustaste - Senden an" den komplaten Pfad mit Dateiname: "D:\Projekte\0705010 Kunde 1.zip" der dann ja im Parameter %1 liegt.

Ist es möglich den Pfad der der Datei herauszufinden?
Also in dem Beispiel: "D:\Projekte\"

Danke und Gruss

Hausen
Member: bastla
bastla Jan 05, 2009 at 13:13:36 (UTC)
Goto Top
Hallo Hausen!

Den Pfad (inkl Laufwerk) erhältst Du mit
%~dp1
Näheres dazu: "for /?" (ziemlich am Ende; das für %I Gezeigte gilt auch für die Parameter %0 bis %9)

Grüße
bastla
Member: Hausen
Hausen Jan 05, 2009 at 14:21:22 (UTC)
Goto Top
Hallo zusammen,

so es ist geschafft! Meine kleine Batch macht alles was ich wollte face-smile
Danke an alle die mir so gut geholfen haben.

Zur Info hier mal meine Batch:

Title=Projekt ohne Quellen speichern

:: Quellordner ermitteln
for /F %%i in (%1) do set "Quellordner=%~dp1"  

:: Datei entzippen
set Quelle=%1
set Ziel="D:\Projekte\Sonstige Arbeiten\Temp\OhneQuellen"  

C:\Programme\WinZip\Wzunzip.exe -d %Quelle% %Ziel%

:: Ordnernamen ermitteln
for /d %%i in (%Ziel%\*.*) do set "Projektname=%%~nxi"  

:: Quellen löschen
rmdir /s /q %Ziel%"\%Projektname%\s7asrcom"  

:: Ordner umbenennen
ren %Ziel%"\%Projektname%" "%Projektname% [Kunde]"  

:: Datei zippen
set Quelle="D:\Projekte\Sonstige Arbeiten\Temp\OhneQuellen"  
set Projektname_Neu="%Quellordner%\%Projektname% [Kunde]"  

C:\Programme\WinZip\wzzip.exe -a -ex -r -p %Projektname_Neu% %Quelle%

:: Entzippte (alte) Datei löschen
rmdir /s /q %Quelle%"\%Projektname% [Kunde]"  

Gruss Hausen
Member: bastla
bastla Jan 05, 2009 at 14:29:56 (UTC)
Goto Top
Hallo Hausen!

Noch eine Anmerkung zur letzten Zeile: Falls "wzzip.exe" einen definierten Errorlevel liefert, könntest Du diesen verwenden, um nur bei erfolgreichem Entpacken der Datei die alten Daten zu löschen - etwa so:
if not errorlevel 1 rd /s /q %Quelle%"\%Projektname% [Kunde]"
oder
if errorlevel 1 (
    echo Fehler beim Entpacken!
    pause>nul
    goto :eof
)
rd /s /q %Quelle%"\%Projektname% [Kunde]"
Grüße
bastla