Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Kundennamen und Ort aus Verzeichnissnamen auslesen

Frage Entwicklung Batch & Shell

Mitglied: solareus

solareus (Level 1) - Jetzt verbinden

09.08.2010 um 11:17 Uhr, 2562 Aufrufe, 18 Kommentare

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
Mitglied: bastla
09.08.2010 um 11:55 Uhr
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)
01.
for /f "tokens=1-3" %%a in ("%Verz%") do ( 
02.
    echo Kunde: %%a 
03.
    echo Ort:   %%b 
04.
    echo Str.:  %%c 
05.
)
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
Bitte warten ..
Mitglied: solareus
09.08.2010 um 13:24 Uhr
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
Bitte warten ..
Mitglied: bastla
09.08.2010 um 14:16 Uhr
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
Bitte warten ..
Mitglied: solareus
09.08.2010 um 14:33 Uhr
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
Bitte warten ..
Mitglied: bastla
09.08.2010 um 14:41 Uhr
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
Bitte warten ..
Mitglied: solareus
09.08.2010 um 14:57 Uhr
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
Bitte warten ..
Mitglied: bastla
09.08.2010 um 15:10 Uhr
Hallo solareus!

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

Grüße
bastla
Bitte warten ..
Mitglied: solareus
09.08.2010 um 17:07 Uhr
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
Bitte warten ..
Mitglied: Biber
09.08.2010 um 17:21 Uhr
[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
Bitte warten ..
Mitglied: bastla
09.08.2010 um 17:26 Uhr
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:
01.
Windows Registry Editor Version 5.00 
02.
 
03.
[HKEY_CLASSES_ROOT\Directory\shell\Baustelle] 
04.
 
05.
[HKEY_CLASSES_ROOT\Directory\shell\Baustelle\command] 
06.
@="D:\\TEMP\\Baustelle.cmd \"%1\"" 
07.
 
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]
Bitte warten ..
Mitglied: solareus
09.08.2010 um 17:34 Uhr
Hallo Biber,

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

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]
Bitte warten ..
Mitglied: Biber
09.08.2010 um 18:04 Uhr
Moin solareus,

Zitat von solareus:
Hallo Biber,

wie hast du die 4 Monate errechnet ?? Über eine batchdatei ? )
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.

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
Bitte warten ..
Mitglied: solareus
09.08.2010 um 18:30 Uhr
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
Bitte warten ..
Mitglied: solareus
09.08.2010 um 18:35 Uhr
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\\\""
Bitte warten ..
Mitglied: Biber
09.08.2010 um 18:46 Uhr
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
Bitte warten ..
Mitglied: solareus
09.08.2010 um 19:04 Uhr
Hallo Biber,

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


Peter
Bitte warten ..
Mitglied: bastla
09.08.2010 um 19:22 Uhr
... dann machen wird das noch einfacher: Per "regedit" eintragen:
"S:\Dokumentation\EDV intern\Makro\Baustelle.bat" "%1"
Grüße
bastla
Bitte warten ..
Mitglied: solareus
09.08.2010 um 19:41 Uhr
Hallo bastla, hallo Biber,

der Aufruf funktioniert !!!

Das Auslesen mit der Schleife von oben funktioniert auch !!

KLASSE; Danke an euch Beide.

Peter
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Batch & Shell
gelöst Appx aus Image auslesen und entfernen (9)

Frage von Markus2016 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...