blueberry
Goto Top

Wenn die Datei kein Ordner ist soll er die Endung entfernen

Hallo Zusammen,

Ich habe ein Programm das Dateien komprimiert (Standard-Zip-Format), aber wenn ich da ein .TXT File rein gebe, dann gibt es die endung .txt.zip... Da ich aber auch Ordner zippen möchte, kann ich nicht einfach die Endung "abschneiden"... Kann mir da jemand einen Trick verraten?
Danke!

Mit freundlichen Grüssen

Blueberry

Content-Key: 100054

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

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

Member: miniversum
miniversum Oct 23, 2008 at 12:53:52 (UTC)
Goto Top
Nehmen wir an der Speicherort der Datei bzw. des Ordners die/den Du komprimieren willst Steht in der Variabeln %in%, dann kansnt Du einfach überprüfen ob das eine Datei ist oder ein Ordner. Das geht dann so:
dir /A-D "%in%"* >NUL 2>NUL && echo Ist eine Datei  

Edit:
1. & durch && ersetzt
2. * hinter Variable eingefügt
Member: bastla
bastla Oct 23, 2008 at 13:06:08 (UTC)
Goto Top
@miniversum
Sei doch nicht so geizig mit den "&" face-wink

(Im Klartext: Mit "&&" wird der folgende Befehl nur ausgeführt, wenn es beim vorhergehenden Befehl keinen Fehler - oder noch genauer: als Ergebnis des vorigen Befehls den Errorlevel 0 - gab; dies ist bei "dir" dann der Fall, wenn zumindest ein passender Eintrag gefunden wurde).

Grüße
bastla
Member: miniversum
miniversum Oct 23, 2008 at 13:10:46 (UTC)
Goto Top
Ups ich werds gleich mal ändern.. Das passiert mir in letzter Zeit viel zu oft das ich sowas vergese irgentwie.. hmmm... Ich werd woll langsam alt ;)
Ichhab übrigens auch noch gade eben hinter der Variabeln ein * hinzugefügt weil es unter Vista sonst nicht funktioniert wie ich grade festgestellt habe.
Member: Blueberry
Blueberry Oct 24, 2008 at 06:17:07 (UTC)
Goto Top
Hallo Zusammen,

Danke für die Tipps (auch wenn ich schon um 15:00 nach Hause ging und das darum anderst gelöst habe... Und ich habe es auch ein bisschen anderst gelöst face-wink. Aber trotzdem danke vielmals!)
So da wäre meine Lösung:

FOR /F "TOKENS=1 DELIMS=" %%A IN ("%~n1") DO SET A=%%A

ist doch auch ne Coole Lösung face-smile

<edit>
Miniversum kannst du noch erklären, was das alles macht ???
Damit ich drauskomme was der da genau macht...
Ich danke dir jetzt schon!
<\edit>


Mit freundlichen Grüssen
Blueberry
Member: bastla
bastla Oct 24, 2008 at 06:48:35 (UTC)
Goto Top
Hallo Sandro!

Anmerkungen zu Deiner Lösung:
Da "TOKENS=1" defaultmäßig verwendet wird, kannst Du es einfach weglassen (vor allem auch, da wegen "DELIMS=" ohnehin nur ein Token erzeugt wird).

Um bei im Namen enthaltenen Leerzeichen den gesamten Namen in die Variable %A% zu bekommen, solltest Du
... SET "A=%%A"
verwenden (bzw es Dir überhaupt zur Gewohnheit machen, bei "set"-Anweisungen die Anführungszeichen so zu setzen).

Grüße
bastla
Member: Blueberry
Blueberry Oct 24, 2008 at 07:08:26 (UTC)
Goto Top
Moin Bastla,

Danke für deine Tipps, sind sehr hilfsreich! Ich werde es mir merken!

Mit freundlichen Grüssen
Blueberry
Member: miniversum
miniversum Oct 24, 2008 at 08:05:52 (UTC)
Goto Top
Deine lösung ist allerdings nciht ganz wasserdicht, da sie nicht überprüft ob es ordner oder dateien sind sondern es wird einfach nur alles vor dem letzten Punkt abschneidet. Bei einem ordner mit dem Namen "Mein.Ordner" würde das shcief gehen...

Klar kann ich dir erklären wie meine Lösung funktioniert.
Mit dem Dir-Befehl kannst du mit der Option /a-d nur Dateien anzeigen lassen (/ad wären nur Verzeichnisse). Rufst du also den Befehl so auf:
dir /a-d "meine datei"  
würdest Du die Ausgabe nur dieser einen Datei bekommen (und der Errorlevel den Dir zurückliefert wäre 0 weil was gefunden wurde). Wäre "meine Datei" ein Verzeichnis würde nichts angezeigt werden (da ja nur nach ateien gefiltert wird) und dir würde einen errorlevel von 1 zurück liefern. Der * dahinter wird benötigt da im fall eines Verzeichnisses sonst der Inhalt des Verzeichnisses angezeigt werden würde statt des Verzeichnisses selbst.
Als nächstes wird die, in diesem Fall störende, Ausgabe des Dir-Befehls unterdrückt und nur der errorlevel ausgewertet. Die Umleitung der Ausgabe geschieht so:
 >NUL 2>NUL 
Die Abfrage des Errorlevels ist auf zwei Arten möglich.
Einmal indem man darunter ein
If %errorlevel% == 0 (
Member: Blueberry
Blueberry Oct 24, 2008 at 08:16:50 (UTC)
Goto Top
Hallo Miniversum,

Danke für deine Erklärung, sie ist sehr ausführlich, so ausführlich das sogar ich das checke face-wink. Und danke für die Lösung. Und das wegen meiner Lösung teste ich noch schnell ( Nicht weil ich dir nicht vertraue, sondern einfach aus Prinzipien und weil mein Lehrmeister auch immer sagt ich soll alles testen face-wink).

<edit>
Meine Lösung ist wirklich nicht Wasserdicht!
Aber es geht um Ordner mit dem Namen "Woche XX" XX steht für die Wochenzahl.
<\edit>


Mit freundlichen Grüssen ...ond e gueti Zyt
Blueberry