solareus
Goto Top

Kundennamen und Ort aus Verzeichnissnamen auslesen

Hallo,

in einer Verzeichnissstruktur klicke ich im WXP-Explorer mit der rechten Maus auf ein Verzeichniss. Per Kontextmenü wird eine Batchdatei aufgerufen. In diesem Batch soll

a) das aktuelle Verzeichniss (das vom Rechtsklick) zur Weiterverarbeitung (Kopieren) erkannt werden und
b) aus dem Verzeichnissnamen ein Kundenname und der Ort gelesen und in eine Variable gesetzt werden.

zu Punkt a)

habe ich hier in einem Beitrag gefunden: cd > %temp%\tempfile.txt mit set /P verz=%temp%\tempfile.txt habe ich versucht, den Verzeichnissnamen in die Variable verz einzulesen => funktioniert aber nicht

zu Punkt b)

die Verzeichnissstruktur ist nicht gleich; sie kann z.B. s:\abc\def\kundenname ort strasse heissen oder auch kürzer z.B. s:\abc\kundenname ort strasse
Kundenname Ort etc. kann verschieden lang sein, sind aber durch ein Leerzeichen getrennt => Idee => den letzten \ finden, von da bis zum Leerzeichen => Kundenname, von da bis zum nächsten Leerzeichen (oder bis zum Ende, die Strasse muss nicht vorhanden sein) => das wäre der Ort

Nur: ich komme nicht weiter

Könnt ihr mir weiterhelfen ?

Peter

Content-Key: 148615

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

Printed on: April 23, 2024 at 23:04 o'clock

Member: bastla
bastla Aug 09, 2010 at 09:55:59 (UTC)
Goto Top
Hallo solareus und willkommen im Forum!

Zu 1) Das Verzeichnis kommt als "%1" an, daher:
set "Verz=%~nx1"
Näheres siehe am Ende der Hilfe zu "for" (dort für "%I" gezeigt) ...

Zu 2)
for /f "tokens=1-3" %%a in ("%Verz%") do (  
    echo Kunde: %%a
    echo Ort:   %%b
    echo Str.:  %%c
)
Wenn's zB keine Straße gibt, lässt sich das natürlich auch vorweg feststellen:
if "%%c" neq "" echo Str.:  %%c
Grüße
bastla
Member: solareus
solareus Aug 09, 2010 at 11:24:03 (UTC)
Goto Top
Hallo bastla,

Danke für die schnelle Antwort. Wenn ich Punkt 1 mit:

set "Verz=%~nx1"
echo %Verz%

versuche, erhalte ich nur die Meldung: echo ist eingeschaltet

Bin ich zu do... ?

Peter
Member: bastla
bastla Aug 09, 2010 at 12:16:28 (UTC)
Goto Top
Hallo solareus!

Ich war davon ausgegangen, dass der Batch bereits per Kontextmenü aufgerufen (und daher das Verzeichnis als Parameter übergeben) würde - ansonsten müsstest Du den Batch (zum Testen) von der Kommandozeile zB mit
VerzInfo.bat "s:\abc\kundenname ort strasse"
aufrufen ...

Grüße
bastla
Member: solareus
solareus Aug 09, 2010 at 12:33:43 (UTC)
Goto Top
Hallo bastla,

der erste Schritt in der Batch ist die Ermittlung des Verzeichnisses.

Mit cd > %temp%\tempfile.txt steht in tempfile.txt das Verzeichniss (aus dem Rechtsklick); soweit OK

Jetzt aus der datei tempfile.txt das Verzeichniss in die Variable verz reinlesen ist die erste Klippe.

Peter
Member: bastla
bastla Aug 09, 2010 at 12:41:27 (UTC)
Goto Top
Hallo solareus!

Die Verwendung der "tempfile.txt" ist schlicht unnötig - es genügt die von mir gepostete erste Zeile (bzw, wenn Du tatsächlich "cd" verwenden willst, dann einfach als Variable "%cd%" - den reinen Verzeichnisnamen erhälts Du dann mit
for %%i in ("%cd%") do set "Verz=%%~nxi"
) ...
Kannst Du (zur Sicherheit) kurz beschreiben, wie diese Batchdatei gestartet wird?

Grüße
bastla
Member: solareus
solareus Aug 09, 2010 at 12:57:09 (UTC)
Goto Top
Hallo bastla,

die Batchdatei wird über das Kontextmenü gestartet (Registry-Eintrag mit Ausführung Command).

Aber auch wenn ich die.bat im Win-Xp Explorer doppelt klicke, kommt die beschriebene Meldung

Den Umweg über tempfile.txt habe ich irgendwo gefunden, ich wußte nicht, dass es einfacher geht

Die Batchdatei siehr so aus:

REM ECHO Off

set "Verz=%~nx1"

echo %Verz%


pause


Peter
Member: bastla
bastla Aug 09, 2010 at 13:10:20 (UTC)
Goto Top
Hallo solareus!

Ergänze den Batchaufruf im "command"-Eintrag um: %1 (mit einem Leerzeichen vor dem "%1")

Grüße
bastla
Member: solareus
solareus Aug 09, 2010 at 15:07:00 (UTC)
Goto Top
Hallo bastla,

in der Registry gibt es unter shell nur den Schlüssel "Baustelle" (die Bezeichnung im Kontextmenue) mit dem Unterschlüssel command der als Ausprägung den Pfad zur Batchdatei hat.

Ich kann weder

im Schlüssel command das " %1" einfügen (Feherlmeldung: fehlende Verknüpfung mit dem Dateityp, der ist aber zugewiesen)

noch

im Pfad das " %1" einfügen (Fehlermeldung: es kommt ein Dialog öffnen mit)

Auch wenn ich start ausführen cmd %1 wähle, kommt kein Ergebniss


Peter
Member: Biber
Biber Aug 09, 2010 at 15:21:05 (UTC)
Goto Top
[OT] @bastla

Ich werde noch überschlägig 458 Jahre und 4 Monate brauchen, bis ich es an einem Montag schaffen werde, so gelassen zu reagieren.
Wenn ich an deiner Stelle bei einem Parameterübergabefehler gefragt hätte:

Zitat von @bastla:
Kannst Du (zur Sicherheit) kurz beschreiben, wie diese Batchdatei gestartet wird?
Und hätte die erschöpfende Antwort erhalten :
die Batchdatei wird über das Kontextmenü gestartet (Registry-Eintrag mit Ausführung Command).

Ich wäre möglicherweise unleidlich geworden...

Vermutlich hätte ich auch nicht geraten (in jeglicher Hinsicht):
Ergänze den Batchaufruf im "command"-Eintrag um: %1 (mit einem Leerzeichen vor dem "%1")
Sondern
Ergänze den Batchaufruf im "command"-Eintrag um: \"%1\" (mit einem Leerzeichen vor dem "%1" und inklusive der Slash-Anführungszeichen-Kombinationen)

Allerdings ist das doch Dönekens... wenn hier ein typisches Montags-Sender-Empfänger-Problem besteht, dann sollten wir schreiben:
[/OT]

Moin solareus:,

willkommen im Forum.
Könntest du bitte mal zur besseren Nachvollziehbarkeit des Fehlers die in dem Registryeintrag
"HKEY_CLASSES_ROOT\Folder\Shell\...WTF ..\command" stehende REG_SZ-Folge posten?
Vorzugsweise in Code-Formatierung, z.b. als Ausgabe von REG QUERY am CMD-Prompt oder als *.Reg-File?

Das würde uns allen unter Umständen noch heute ein zeitiges Essen ermöglichen.

Danke und Gruß
Biber
Member: bastla
bastla Aug 09, 2010 at 15:26:09 (UTC)
Goto Top
Hallo solareus!

Kann ich nicht nachvollziehen ...

Unter XPSP3 habe ich eben einen entsprechenden Schlüssel erstellt und exportiert - die entstandene ".reg"-Datei sieht so aus:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Baustelle]

[HKEY_CLASSES_ROOT\Directory\shell\Baustelle\command]
@="D:\\TEMP\\Baustelle.cmd \"%1\""  
Damit funktioniert der Batch wie er soll ...

Grüße
bastla

[Edit] @Biber: Ja, die Anführungszeichen hatten gefehlt, aber irgendein Ergebnis hätte es trotzdem geben müssen ... [/Edit]
Member: solareus
solareus Aug 09, 2010 at 15:34:45 (UTC)
Goto Top
Hallo Biber,

wie hast du die 4 Monate errechnet ?? Über eine batchdatei ? face-smile)

Hier der Inhalt der .reg
>
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Baustelle]
@="Baustelle"

[HKEY_CLASSES_ROOT\Directory\shell\Baustelle\command]
@="\"S:\\Dokumentation\\EDV intern\\Makro\\Baustelle.bat\""
und
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Drive\shell\Baustelle]
@="Baustelle"

[HKEY_CLASSES_ROOT\Drive\shell\Baustelle\command]
@="\"S:\\Dokumentation\\EDV intern\\Makro\\Baustelle.bat\""


Hochladen wie ???

Wenn ich command umbenenn will mit der Kombination \"%1\" (plus Leerzeichen vor dem ) erhalte ich die Fehlermeldung => geben sie einen Namen ohne \ ein

Peter

[Edit Biber] CodeTaXX [/Edit]
Member: Biber
Biber Aug 09, 2010 at 16:04:36 (UTC)
Goto Top
Moin solareus,

Zitat von @solareus:
Hallo Biber,

wie hast du die 4 Monate errechnet ?? Über eine batchdatei ? face-smile)
Ja, deshalb konnte ich nicht früher posten... so was dauert ja seine Zeit.. face-wink

Hier der Inhalt der .reg
Den setze ich dir gleich in DEINEM Kommentar in Codeformatierung. Schau dann bitte einmal mit "Editieren" in deinen Kommentar, wie das geht.

Wenn ich command umbenenn will
Nein, das willst du gar nicht *stiime anheb*

Nein, das machen wir anders.

Du sollst da nichts umbenamsen, sondern machst (wenn du den Weg üner RegEdit gehst) einen Doppelklick auf den Schlüssel "command".
Dann wird der Default-Wert (Der hat den Pseudonamen "@") angezeigt zum Editieren:
""\"S:\\Dokumentation\\EDV intern\\Makro\\Baustelle.bat\"
1) wer immer den da wie-auch-immer reingewummt hat... Du erkennst vielleicht die Slash-Anführungszeichen-Kombination wieder, die ich auch verkaufen wollte.
2) dahinter, hinter alles, was dort schon steht, 2a) ein Leerzeichen 2b) \"%~1\"
3) Und merk dir aber im Hinterkopf, dass dieser Kontexteintrag zwar für alle Benutzer sichtbar ist, aber nur bei denen klappen kann, die ein Laufwerk "S:\" gemapt haben. Das führt bestimmt mal irgendwann zu Fehlern.

So, aber jetzt erst mal der nächste Test bitte...

Grüße
Biber
Member: solareus
solareus Aug 09, 2010 at 16:30:54 (UTC)
Goto Top
Hallo Biber,

wenn ich den Eintrag ändere (oder lösche und neu anlege); die Zeichenfolge eingebe (aus meinem geänderten Kommentar), den Key exportiere, erhalte ich folgendes:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Drive\shell\Baustelle]
@="Baustelle"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Drive\shell\Baustelle\command]
@="\"\\\"S:\\\\Dokumentation\\\\EDV intern\\\\Makro\\\\Baustelle.bat\\\"\""

also heftig viele \\\

Mit obigem Eintrag und rechter Mausklick auf ein Verzeichniss kommt die Meldung: Zugriff verweigert (gleiche Meldung wie für Verzeichnisse euf die ich keinen Zugriff habe.

Peter
Member: solareus
solareus Aug 09, 2010 at 16:35:31 (UTC)
Goto Top
Hallo Biber,

mit deinen Anmerkungen aus 2a+b sieht es jetzt so aus => ich dachte, ich brauche nur aus meinem Kommentar kopieren

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\Baustelle]
@="Baustelle"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\Baustelle\command]
@="\"\\\"S:\\\\Dokumentation\\\\EDV intern\\\\Makro\\\\Baustelle.bat\\\"\" \\\"%~1\\\""
Member: Biber
Biber Aug 09, 2010 at 16:46:15 (UTC)
Goto Top
Moin solareus,

warte... nicht zu viele Fässer gleichzeitig aufmachen.

Der Slash soll ja nur ein einzeines Anführungszeichen "mackieren" in der registry bzw beim Rein- und Rauswuppen (via *.reg-Datei z.B.)

Bitte trag jetzt und heute einmalig den ganzen Quark per Hand ein (RegEdit aufrufen, zum richtigen Key wackeln und dort beo Defaultwert "@"
\"S:\\Dokumentation\\EDV intern\\Makro\\Baustelle.bat\" \"%~1\""
eintippseln... dort, wo das Eingabefeld wartet.

Wir können es später per Datei oder per REG ADD machen... aber jetzt bitte erst einmal tippfehlerfrei auf die ganz behäbige Art.

Und dann den Aufruf testen.

Grüße
Biber
Member: solareus
solareus Aug 09, 2010 at 17:04:31 (UTC)
Goto Top
Hallo Biber,

alles per Hand eingetragen (an beiden Stellen); gleicher Fehler: Zugriff verweigert


Peter
Member: bastla
bastla Aug 09, 2010 at 17:22:54 (UTC)
Goto Top
... dann machen wird das noch einfacher: Per "regedit" eintragen:
"S:\Dokumentation\EDV intern\Makro\Baustelle.bat" "%1"
Grüße
bastla
Member: solareus
solareus Aug 09, 2010 at 17:41:25 (UTC)
Goto Top
Hallo bastla, hallo Biber,

der Aufruf funktioniert !!!

Das Auslesen mit der Schleife von oben funktioniert auch !!

KLASSE; Danke an euch Beide.

Peter