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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 148615
Url: https://administrator.de/forum/kundennamen-und-ort-aus-verzeichnissnamen-auslesen-148615.html
Ausgedruckt am: 30.04.2025 um 21:04 Uhr
18 Kommentare
Neuester Kommentar
Hallo solareus und willkommen im Forum!
Zu 1) Das Verzeichnis kommt als "%1" an, daher:
Näheres siehe am Ende der Hilfe zu "
Zu 2)
Wenn's zB keine Straße gibt, lässt sich das natürlich auch vorweg feststellen:
Grüße
bastla
Zu 1) Das Verzeichnis kommt als "%1" an, daher:
set "Verz=%~nx1"
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
)
if "%%c" neq "" echo Str.: %%c
bastla
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 "
) ...
Kannst Du (zur Sicherheit) kurz beschreiben, wie diese Batchdatei gestartet wird?
Grüße
bastla
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 mitfor %%i in ("%cd%") do set "Verz=%%~nxi"
Kannst Du (zur Sicherheit) kurz beschreiben, wie diese Batchdatei gestartet wird?
Grüße
bastla
[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:
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" 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
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 :Kannst Du (zur Sicherheit) kurz beschreiben, wie diese Batchdatei gestartet wird?
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")
SondernErgä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
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:
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]
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\""
Grüße
bastla
[Edit] @Biber: Ja, die Anführungszeichen hatten gefehlt, aber irgendein Ergebnis hätte es trotzdem geben müssen ... [/Edit]
Moin solareus,
Ja, deshalb konnte ich nicht früher posten... so was dauert ja seine Zeit..
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.
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:
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
Ja, deshalb konnte ich nicht früher posten... so was dauert ja seine Zeit..
Hier der Inhalt der .reg
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
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 "@"
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
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