donsimeo
Goto Top

Variable HOMEPATH an CMD übergeben

Guten Tach,

ich würde gern in vb6 eine Textdatei per cmd in das verzeichnis %HOMEDRIVE%%HOMEPATH% schreiben lassen. (Das kann man ja einfach so text > "%HOMEDRIVE%%HOMEPATH%\text.txt" in cmd eingeben.) Aber irgendwie nicht aus vb6??

Also: Shell "cmd.exe /k " & " Text" & " > " & "%HOMEDRIVE%%HOMEPATH%\Text.txt"

funktioniert nicht... variablen kann man scheinbar auch nicht übergeben und selbst:

Shell "cmd.exe /k " & " Text" & " > " & "C:\Dokumente und Einstellungen\User\Text.txt"

geht nicht.

Kann mir jemand sagen was ich falsch mache?

Content-ID: 59675

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

Ausgedruckt am: 05.11.2024 um 15:11 Uhr

AndreasHoster
AndreasHoster 24.05.2007 um 09:13:37 Uhr
Goto Top
Ja, kann ich.
1. Fehler:
Schon Dein Beispiel text > "%HOMEDRIVE%%HOMEPATH%\text.txt" geht nicht. Es muß echo text > "%HOMEDRIVE%%HOMEPATH%\text.txt" heißen.
2. Fehler (Fehler 1 habe ich für Dein Beispiel schon korrigiert):
Shell "cmd.exe /k echo" & " Text" & " > " & "%HOMEDRIVE%%HOMEPATH%\Text.txt" ergibt als Befehlszeile: echo Text > %HOMEDRIVE%%HOMEPATH%\Text.txt
Wenn Du das mit Deinem Beispiel vergleichst, wirst Du feststellen, daß es nicht daselbe ist. Es fehlen nämlich die Anführungszeichen um %Homedrive... die man braucht, weil in HomePath nämlich Leerzeichen drinvorkommen.
Also:
Shell "cmd.exe /k echo" & " Text" & " > " & """%HOMEDRIVE%%HOMEPATH%\Text.txt"""
Und Variablen tun, wenn man es richtig macht.
3. Anmerkung:
Wieso cmd /k?
mit cmd /k bleibt die Kommandozeile offen nach Ausführung des Befehls. Ist das so gewünscht? mit cmd /c wird sie nach dem echo Befehl geschlossen.
DonSimeo
DonSimeo 24.05.2007 um 09:42:19 Uhr
Goto Top
juchuu,

es funktioniert!! Ach herrlich das es Menschen gibt die wissen und helfen, wenn man selbst nicht weiter kommt. Danke.

Das echo habe ich weggelassen weil mir die CMD net view ausführt (tschuldigung). /k dachte ich muss rein um die cmd mit Parametern zu starten, und geschlossen habe ich sie am Ende der Zeile mit ,vbHide da sieht man sie nicht einmal (oder bleibt sie dann im Hintergrund geöffnet?).

Wünsche einen schönen Tag, Gruß Simi.
DonSimeo
DonSimeo 24.05.2007 um 10:24:52 Uhr
Goto Top
Oh,
ich sehe gerade, bei /k und vbHide (heißt ja auch nur versteckt) wird der Prozess nicht beendet.
Biber
Biber 24.05.2007 um 21:58:26 Uhr
Goto Top
Moin DonSimeo,

ich weiß nicht, ob es Dich interessiert, aber Du kannst auch aus VB6 (und sogar bei den Leicht-Modellen wie VBSkript) direkt auf die Umgebungsvariablen (neudeutsch: Environment) zugreifen.

Der Umweg über das Schreiben/Lesen einer EnvironmentStrings in eine Textdatei erscheint mir ein wenig umwegig.

Gruss
Biber
DonSimeo
DonSimeo 25.05.2007 um 14:54:06 Uhr
Goto Top
Meinst Du mit Umgebungsvariablen Funktionen wie "Net View"?
Denn darum ging es mir ja...

Wenn ich Net View direkt abgreifen und in eine textbox schreiben könnte, wäre
das natürlich schon praktisch! Momentan schreibe ich's per cmd in eine .txt und lese
diese dann aus...

Kannst mir gerne einen Skript-Ansatz dafür geben, aber jetzt fahre ich ersteinmal in den Urlaub!

Schöne GRüße, Simi.
Biber
Biber 25.05.2007 um 18:33:56 Uhr
Goto Top
Nein, DonSimeo,
Meinst Du mit Umgebungsvariablen Funktionen wie "Net View"?
So etwas meinte ich nicht mit Umgebungsvariablen...
Ich hatte mich an Deiner Überschrift orientiert und war davon ausgegangen, dass entweder
  • VBSkript die Umgebungsvariablen %HOMEDRIVE% / %HOMEPATH% auflösen muss oder
  • CMD.exe die beiden Strings "%HOMEDRIVE%" und "HOMEPATH%" in genau dieser Form zum Interpretieren in die Hand (oder in was auch immer) gedrückt bekommt.

Ihr seid jetzt den zweiten Weg gegangen. Ich meinte nur, der erste wäre auch möglich.

An irgendein "Net View" habe ich nicht im Entferntesten gedacht.

Also: alles ist gut... die Lösung funktioniert und ein grüner Haken ist auch dran...

Dann schönen Urlaub
Biber
bastla
bastla 26.05.2007 um 12:56:38 Uhr
Goto Top
Hallo DonSimeo!

Für nach dem Urlaub face-wink:
Set objShell = CreateObject("WScript.Shell")  
Set objWshScriptExec = objShell.Exec("net view")  
Set objStdOut = objWshScriptExec.StdOut
strOutput = objStdOut.ReadAll
Text1.Text = strOutput
Falls Du die Zeilen einzeln brauchst, könntest Du so weiter vorgehen:
arLines = Split(strOutPut, vbCrLf)
For i = 0 To UBound(arLines)
    MsgBox arLines(i)
Next
Die MsgBox-Zeile steht stellvertretend für Deine eigentliche Verarbeitung der einzelnen "net view"-Zeilen.

Grüße
bastla