# Probleme mit Shell



## webmaster76 (22. Juli 2005)

Hallo an alle,

habe da mal wieder ein kleines Problemchen...
Über den Shell-Befehl kann ich ja Dateien aufrufen (z.B. Shell ("test.bat")).

Nun möchte ich mit Shell einen dir-Befehl machen (also Shell("dir *.txt >> c:\test.txt"))

Alledings sagt mit VB, dass die Datei nicht gefunden werden kann. Woran liegt es bzw. wie kann ich dieses Problem lösen?


----------



## Da Hacker (22. Juli 2005)

Hallo webmaster76,

dafür wirst du eine API benutzen müssen. Diese nennt sich "Shell Execute". Endlich mal eine API, die nützlich ist  .

Hier hat mir Shakie genau erklärt, wie es funktioniert:
http://www.tutorials.de/tutorials184126.html

Ich hoffe, ich konnte helfen.

Ciao:
Da' Hacker


----------



## webmaster76 (22. Juli 2005)

Sorry, aber ich verstehe da nur Bahnhof. Bin kein Profi :-(

Wie kann mir das nützen den dir-Befehl auszuführen?


----------



## Da Hacker (22. Juli 2005)

Hi webmaster76,


			
				webmaster76 hat gesagt.:
			
		

> Bin kein Profi :-(


Hehe, ich doch auch nicht *Selbstbewusst* 

Also ich habe aus deiner Beschreibung gelesen, dass du eine Datei öffnen willst. Wobei "dir" für den Pfad steht. Klar, etwas anderes kannst du mit Shell ja auch nicht machen.
Wenn du nun eine Variable(Pfad) hast, mit dem Inhalt "C:\Test.txt", dann müsste dein Code so lauten, damit du sie öffnen kannst:


```
Private Declare Function ShellExecute Lib "shell32.dll" Alias _
		"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation _
		As String, ByVal lpFile As String, ByVal lpParameters _
		As String, ByVal lpDirectory As String, ByVal nShowCmd _
		As Long) As Long
 
ShellExecute(0, "Open", Pfad, "", Pfad, 1)
```

Wenn du nun keine Datei öffnen willst, bitte ich um eine genauere Beschreibung  

Ciao:
Da' Hacker


----------



## webmaster76 (22. Juli 2005)

ups, da habe ich mich wohl mißverständlich ausgedrückt, sorry...

Also, ich möchte eine Liste der Dateien in einem Ordner (und dessen Unterordner) erzeugen und diese dann in eine Datei schreiben. In Windows mache ich das ja mit folgenden Befehl im DOS-Fenster:

dir /s /b c:\temp >> c:\liste.txt

d.h. gebe ich das im DOS-Fenster (in der CMD) so als Befehl ein, dann schreibt er mit alle Dateien im Verzeichnis c:\temp (und dessen Unterverzeichnisse) in die Datei c:\liste.txt.

Und genau das möchte ich aus VB machen, wenn der Benutzer einen Button drückt. Geht das?


----------



## Shakie (22. Juli 2005)

Folgender Code listet alle Verzeichnisse und Dateien im Verzeichnis "c:\" auf (die gefundenen Sachen werden in eine Textbox mit Namen "txtAusgabe" geschrieben):

```
Private Sub Auflisten()
	Dim strTemp As String
	strTemp = VBA.Dir("C:\", vbDirectory Or vbHidden Or vbSystem Or vbVolume)
 
	While Len(strTemp) > 0
		If strTemp <> "." And strTemp <> ".." Then Me.txtAusgabe.Text = Me.txtAusgabe.Text & strTemp & vbCrLf
		strTemp = VBA.Dir
	Wend
End Sub
```
Jetzt brauchst du es statt in eine Textbox zu schreiben nur noch in eine Datei zu schreiben. Dazu gibt es hier bereits genügend Threads, die das behandeln.

Wenn du nur alle *.txt-Dateien aufgelistet haben möchtest, dann musst du "C:\" durch "C:\*.txt" ersetzen.


----------

