Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1200to1204
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Batch Befehl "type" über VBA ansprechen

Batch Befehl "type" über VBA ansprechen
pastinake
Hallo Excelaner,
ich recherchiere mir einen Wolf und komme nicht auf die Lösung. Ich möchte gerne den Batch Befehl "type" über ein VBA Script ausführen lassen. Mit "Type" kann ich mehrere Textdateien in eine zusammenfassen lassen.
Am besten über ein WScript.Shell Objekt, um die Abarbeitung abwarten zu können.
Ich dachte mir das so:
Sub test()
Dim sh As Object
Set sh = CreateObject("WScript.Shell")
sh.Run "Type *.txt > Zusammenfassung.txt"
End Sub
Ich fürchte es liegt daran, dass Type kein ausführbares Programm mit Parameterübergabe ist (anders zB bei xcopy) und es deswegen immer auf Fehler läuft.
Mir fällt aber auch keine Ausweichlösung ein. Mit Shell "Type *.txt > Zusammenfassung.txt" geht es auch nicht.
Vielen Dank für Eure Gedanken
pastinake
AW: Batch Befehl "type" über VBA ansprechen
02.03.2011 11:24:55
Anton
Hallo pastinake,
so vllt (ungetestet):
sh.Run "cmd Type *.txt > Zusammenfassung.txt",,True
mfg Anton
AW: Batch Befehl "type" über VBA ansprechen
02.03.2011 13:00:32
pastinake
Hallo Anton,
vielen Dank für Deine schnelle Antwort. Der Ansatz erscheint mir sinnvoll, nur zum Laufen bekomme ich es nicht. Ich teste gerade parallel,- melde mich wenn ich eine Lösung habe....
Bernd
AW: Batch Befehl "type" über VBA ansprechen
02.03.2011 13:03:40
Reinhard
Hallo Pastinake,

Sub Texte()
Dim Eing
Eing = Shell("cmd /c type c:\test\*.txt > c:\Zus\zusammenfassung.txt")
End Sub

Gruß
Reinhard
AW: Batch Befehl "type" über VBA ansprechen
02.03.2011 13:12:37
pastinake
Hallo Reinhard,
DANKE,- das war es. Er benötigt offensichtlich neben dem /c (..oder /k) auch noch den kompletten Pfad.
So funktioniert es:
Sub EinzelneTextdateienZusammenfassen()
Dim sh As Object
Set sh = CreateObject("WScript.Shell")
sh.Run "cmd /c type D:\Quellpfad\*.txt > D:\Zielpfad\Zusammenfassung.txt", vbNormalFocus, True
End Sub

Vielen vielen Dank !
Bernd
Anzeige
Ot
02.03.2011 19:10:41
Reinhard
Hallo Bernd,
WHS sagt mir nicht soviel wie das Dos von früher, von daher habe ich noch manche Kenntnisse :-)
Und Type, wenn es ist wie du sagst, daß es keine type.exe gibt, dann ist es genauso wie DIR in die Commend.com, oder command.exe, oder cmd.exe usw. eingebaut.
Da konnte ich mal damit einen Arbeitskollegen ganz schön irritieren zu Doszeiten.
An seinem Rechner habe ich den richtigen Eintrag Dir in der Befehlsdatei mit einem Editor durch abc ersetzt.
Dann eine Dir.bat reingestellt. In der .Bat war dann sowas wie ein Zufallsgenerator für Arme, jedenfalls bei jedem Dir Aufruf kam eine Meldung auf den Bildschirm, die ich festgelegte hatt *lol*
Zurück zu dir.
Nein, Type BRAUCHt keinen Pfad, es muß auch ohne gehen. Dann wird das Verzeichnis genommen was grad aktuell ist.
Also ist
cmd /c type c:\test\*.txt > c:\test\Zusammen.txt
identisch mit
cmd /c type *.txt > Zusammen.txt
bzw.
cmd /c type C:*.txt > c:Zusammen.txt
wenn das aktuelle Verzeichnis c:\test ist.

Wenn das vorher mit dem Beitrag des anderen nicht klappte, so liegt das wahrscheinlich daran daß da der Parameter /c gefehlt hat hinter cmd.
Noch etwas was evtl. wichtig werden könnte. Ich kenne jetzt das Run nicht so genau, aber hast ja gesehen, mit Shell geht es auch.
Da ich durchaus, weil die schön schnell sind, auch in Vba alte Dosbefehle wie DIR aufrufe habe ich leider etwas Negatives festgestellt.
Nehmen wir mal an, in Vba rufe ich mit
E=shell("cmd /c dir C:\*.xls /s > c:\test\Dirxls.tx2")
den Dos-Befehl DIr auf, also etwas was lange dauert, alle xls-dateinen der gesamten FP, also auch Unterverzeichnisse, in einer txt aufzulisten.
Irgednwie ist da Vba zu schnell oder was auch immer. Jedenfalls ist in c:\test\Dirxls.tx2 viel zu wenig Inhalt, als wenn da DIR abgebrochen wurde.
Überprüfe das unbedingt bei deinem Type. Nicht daß du glaubst du hättest da alle ,txt in deiner Zusammenfassung und dem ist gar nicht so weil nur die ersten 100 drinstehen.
Weiß grad nicht, vielleicht wäre da DoEvents hilfreich o.ä.
PS: der Parser von Hans nervt, wegen dem größer-Zeichen muß ich den pre tag setzen, mannomann, kann man das nicht endlich mal ändern *fluch*
Gruß
Reinhard
Anzeige
...Warum, Reinhard? Das ~f~-Tag...
02.03.2011 19:51:50
Luc:-?
…hat 1. HWH doch extra (da)für (Fmln) geschaffen und…
2. hast du doch auch ohne pre-Tag das > in E=shell("cmd /c dir C:\*.xls /s > c:\test\Dirxls.tx2") hin bekommen…! ;->
Gruß Luc :-?
AW: ...Warum, Reinhard? Das ~f~-Tag...
03.03.2011 18:53:59
Reinhard
Hallo Luc,
danke,
zu 1 das f in Tilden eingehüllt mag ich nicht, fertig :-) Ich nehm dann lieber pre.
Zu 2, ja, erstaunlich, habe ich etwa den Parser von Hans fast in die Knie gezwungen so daß er mir mal > durchgehen läßt?
(hier hab ich das Zeichen > getürkt, für die Praxis zu aufwendig)
Gruß
Reinhard
> ist doch nicht aufwendig! ;-) Gruß owT
04.03.2011 14:51:21
Luc:-?
:-?
AW: > ist doch nicht aufwendig! ;-) Gruß owT
04.03.2011 16:08:34
Reinhard
Hallo Luc,
einfacher für alle wäre es schon wenn Hans daß mal korrigieren könnte/würde :-)
Und, du benutzt korrekt hinten das Semikolon. Zumindest bei & # 62 ; ist es so, wenn man hinten das Semikolon wegläßt klappt das in der Mülltonne InternetExplorer, der sich an keine Absprachen/Standards hält immer noch, aber mein FireFox mag das nicht, er mag es mit Semikolon wie ausgemacht.
Und2, war/ist schon immer so, Zahlen kann ich mir viel viel besser merken als Namen.
Das ist aber kein Dogma, heißt natürlich für z.B. Excel auch daß ich bei ColorIndex schreibe xlnone.
Da klappt das gut.
Hier in dem fall ist & # 62 ; vielschneller bzw. gleich im Kopf, und schon hingeschrieben bis mir vielleicht einfällt, da gibt's doch auch lt und gt.
Meine Bitte an hans bleibt bestehen.
Und3, ich habe noch nicht nachgeprüft, warum es mir ohne das alles, auch ohne pre, gelang da in einem Beitrag ein > am Parser vorbei "reinzuschmuggeln".
Alles nur eine Zeitsache, wie bei Holgers globaler Fehlerroutine, alles lösbar im Lauf der zeit, nur die läuft mir weg, jetzt ein Zeitstillstand von einem jahr wäre obtimal, da könnte ich alle Probleme in Excel die ich "irgendwann" mal auch lösen möchte angehen, im realen sind auch viele Dinge mal fertigzumachen.
Gruß
Reinhard
Anzeige
Der ist ja weg, wn F-Routine fertig ist... ;-) orT
05.03.2011 21:40:32
Luc:-?
Gruß Luc :-?
AW: Ot
02.03.2011 19:53:30
pastinake
Hallo Reinhard,
vielen Dank für deine ausführlichen Worte. Dein armer Kollege,- hat ja was vom "Operator from Hell" ;-0
Um VBA auszubremsen, wähle ich den Weg über das WScript.Shell Objekt. Denn hier kann ich mit dem Zusatzparameter ,,True das Warten auf den Shell Abschluss erzwingen. Möglicherweise auch was für Dich. Dennoch Danke für den Hinweis,- lege ich mir mal in den Hinterkopf,- Rubrik EXCEL-BUGS und andere Suizid Gründe. Ein DoEvents reicht da leider nicht.
Noch einmal lieben Dank und einen erholsamen Abend
Bernd
AW: Ot
02.03.2011 21:32:38
Anton
Hallo Reinhard,
Ich kenne jetzt das Run nicht so genau, aber hast ja gesehen, mit Shell geht es auch.
hier paar Auszüge aus der OH.
Shell:
Die Shell-Funktion führt standardmäßig andere Programme asynchron aus. Daher muß ein mit Shell  _
ausgeführtes Programm noch nicht abgeschlossen sein,
wenn die nächsten Anweisungen, die auf die Shell-Funktion folgen, ausgeführt werden.

WshShell.Run:
Run-Methode
Erstellt einen neuen Prozess, der strBefehl ausführt.
Objekt.Run(strBefehl, [intFensterStil], [bAufRückkehrWarten])
Argumente
Objekt
WshShell-Objekt.
strBefehl
Umgebungsvariablen im Parameter strBefehl werden automatisch erweitert.
intFensterStil
Optional. Setzt den Fensterstil des auszuführenden Programms.
bAufRückkehrWarten
Optional. Wird bAufRückkehrWarten nicht angegeben oder hat dieser Parameter den Wert FALSE, so  _
wird nicht auf die Terminierung des Prozesses gewartet, sondern die Ausführung des Skriptes sofort fortgesetzt.
mfg Anton
Anzeige
AW: Ot
03.03.2011 10:01:19
pastinake
Hallo Anton,
auch an Dich noch einmal herzlichen Dank!
Gruß aus Düsseldorf
Bernd

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige