Anzeige
Archiv - Navigation
996to1000
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

frage zum shell-befehl

frage zum shell-befehl
01.08.2008 13:56:11
JStadler
Hallo liebe Leute,
ich hätte da mal eine Frage zum Shell-Befehl.
Vorab: das Programm, das ich geschrieben habe, funktioniert super. Mein Problem ist, dass ich an der Shell-Stelle nicht genau weiß, warum ;)
Um folgendes gehts:
Ein anderes Programm muß von mir in Excel bearbeitete Daten weiterverarbeiten. Hierfür habe ich per VBA eine Batch-Datei ("runmerge.bat") erstellt, welche ich dann über Shell... laufen lasse:
x = Shell("cmd.exe /c del runmerge.bat")
Dabei werden in dem betroffenen Verzeichnis eine Menge temporärer Dateien erzeugt, welche ich in einem zweiten Schritt wieder lösche:
x = Shell("cmd.exe /c quclean -a -y")
Wie gesagt funktioniert das super. Was mir nicht klar ist, ist warum der letztgenannte Programmschritt genau auf das richtige Verzeichnis zugreift, obwohl der Pfad doch nirgends auftaucht?
Alternativ habe ich es auch so probiert ("pfad" wurde zuvor per Dialogbox definiert):
befehl = "cmd.exe /c " & pfad & "quclean -a -y"
x = Shell(befehl)

So funktionierts aber leider nicht.
Letztlich ist das jetzt jammern auf hohem Niveau, da ja alles funktioniert. Ich würde mich aber (zumal es sich um einen Löschbefehl handelt) sicherer fühlen, wenn ich auch wüsste warum :)
Vielleicht hat der eine oder andere ja einen Tip (vielleicht, wie ich den Pfad von vornherein im Befehl unterkriege).
Vielen Dank im Voraus
Johannes

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: frage zum shell-befehl
01.08.2008 14:07:42
JStadler
oh oh, kleiner Fehler.
Natürlich lasse ich das Programm so laufen:
x = Shell(pfad & "runmerge.bat")
danach kommt erst
x = Shell("cmd.exe /c del runmerge.bat")

AW: frage zum shell-befehl
01.08.2008 14:11:33
Ramses
Hallo
Ich weiss zwar nicht WAS bei dir funktioniert, aber das was du hier zeigst funktioniert auf jeden Fall sicherlich NICHT.
"..welche ich dann über Shell... laufen lasse:
x = Shell("cmd.exe /c del runmerge.bat")..."
Mit dieser Anweisung wird die Datei "runmerge.bat" gelöscht und sicher nicht gestartet.
Excel greift auf das letzte aktive und bekannte Verzeichnis zurück.
Ob über Dialogbox oder Variable, so geht es auf jeden Fall
Pfad = "C:\"
x = Shell("cmd.exe /c del " & pfad & "runmerge.bat")
Aber wie gesagt,... gestartet wird hier nicht die Datei, sondern die Löschaktion
Gruss Rainer
Gruss Rainer

Anzeige
AW: frage zum shell-befehl
01.08.2008 14:25:22
JStadler
Hallo Rainer,
habs selbst schon gemerkt. Hab nur die falsche Zeile kopiert und im zweiten Posting richtiggestellt.
Mir gings ja auch hauptsächlich um die quclean-Zeile:
x = Shell("cmd.exe /c quclean -a -y")
funktioniert.
Dagegen:
x = Shell("cmd.exe /c " & pfad & "quclean -a -y")
funktioniert nicht (wird nicht ausgeführt).
Vom Prinzip her reicht das ja auch schon, wenn, wie Du sagst, das letzte und aktive Verzeichnis angesprochen wird. Aber zumindest theoretisch müsste ich den Pfad doch auch irgendwie unterkriegen, oder?
Grüße
Johannes

Anzeige
AW: frage zum shell-befehl
01.08.2008 14:28:31
Reinhard
Hi Johannes,
dann stimmt dein Pfad nicht, Rainer hat es doch richtig beschrieben.
Zeige mal einen kompletten lauffähigen Kurzcode.
Gruß
Reinhard

AW: frage zum shell-befehl
01.08.2008 14:42:00
JStadler
Hallo Reinhard,
Der Teil des Codes, um den es geht, lautet schlicht so:
If MsgBox("Temporäre Dateien löschen?", vbOKCancel) = vbOK Then
x = Shell("cmd.exe /c quclean -a -y")
End If

Ersetze ich die Shell-Zeile mit folgendem Code:
x = Shell("cmd.exe /c " & pfad & "quclean -a -y")
funktionierts nicht (im entsprechenden Verzeichnis wird nichts gelöscht).
Die Variable pfad enthält zu diesem Zeitpunkt folgenden Wert:
C:\Dokumente und Einstellungen\SJ112477\Desktop\Coding-Tool\
Grüße
Johannes

Anzeige
8 Zeichen Limit...
01.08.2008 14:58:00
Ramses
Hallo
"...Dokumente und Einstellungen..."
Ist zu lang und enthält Leerzeichen. Da ist die normale CMD.EXE überfordert
Probiers mal so
Pfad = "C:\Dokumente und Einstellungen\SJ112477\Desktop\Coding-Tool\"
x = Shell("cmd.exe /c """ & pfad & "quclean"" -a -y")
Gruss Rainer

AW: frage zum shell-befehl
01.08.2008 14:31:02
ramses
Hallo
x = Shell("cmd.exe /c " & pfad & "quclean -a -y")
Funktioniert schon.
Im Normalfall würde ich schreiben, lies dir das nochmal durch oder schreibe alles aus
In deinem Fall mache ich einen Ausnahme
x = Shell("cmd.exe /c C:\DeinVerzeichnis\Runmerge.batquclean -a -y")
Siehst du den Fehler :-)
Wobei ich nicht weiss, was "quclean" ist. Ist das ein übergebener Parameter.
Gruss Rainer

Anzeige
AW: frage zum shell-befehl
01.08.2008 15:04:28
JStadler
Hallo Rainer,
oh Mann. Ich Voll-Newbie :) Da ich mich in Dos absolut nicht gut auskenne, habe ich irrtümlicherweise angenommen, quclean sei ein Dos-Befehl ;)
Tatsächlich handelt es sich seinerseits um eine Batch-Datei, welche extra angelegt wurde, um eben die durch das Programm verursachten temporären Dateien zu löschen. Ist sozusagen Teil des Programms.
quclean heißt die Batch, -a -y sind übergebene Argumente, welche festlegen, welche Dateien gelöscht werden sollen (wie genau die Batch arbeitet, weiß ich leider auch nicht, ist recht umfangreich).
Ich habs jetzt eben so versucht, wie ich auch "runmerge" (erfolgreich) starte, nämlich:
x = Shell(pfad & "quclean -a -y")
Dabe erhalte ich aber die Fehlermeldung "Datei nicht gefunden". quclean liegt nämlich in einem anderen Verzeichnis (im Verzeichnis des Hauptprogramms).
Schreibe ich aber
x = Shell("cmd.exe /c quclean -a -y")
wird korrekt ausgeführt. Warum auch immer.

Anzeige
AW: frage zum shell-befehl
01.08.2008 15:16:10
Ramses
Hallo
"...Warum auch immer...."
Da ist ganz logisch.
1. Siehe meinen Beitrag zur Limitierung und der Leerzeichen
2. CMD sucht in bestimmten Verzeichnissen (Windows-Umgebungsvariablen) und in bestimmten Pfaden
von registrierten Programmen nach ausführbaren Dateien.
Wenn der Pfad nicht stimmt "Leerzeichen" !!, dann geht das nicht.
Die Suchfunktion wird aber von Windows übernommen und die Datei gefunden und zur Ausführung übergeben
Gruss Rainer

AW: frage zum shell-befehl
01.08.2008 15:27:56
JStadler
Hallo Rainer,
Dass Windows nach der Datei sucht wusste ich nicht. Jetzt ist klar, warums funktioniert.
Die Fehlfunktion kann aber nicht am Pfad liegen, weil "meine" Batch-Datei "runmerge" durch die Zeile
x = Shell(pfad & "runmerge.bat")
ja ausgeführt wird. Es liegt wohl tatsächlich einfach daran, dass quclean nicht im entsprechenden Verzeichnis liegt.
Wenn ich manuell ein Dos-Fenster öffne, mich per "cd Dokumente*", "cd sj112477", "cd desktop", "cd coding-tool" durch die Verzeichnisse bewege und dann "quclean -a -y" eintippe, wird richtig ausgeführt. Daher dachte ich, ich könnte den Pfad auch irgendwie im VBA-Code unterkriegen.
Kann ich in der Shell vermerken, Dos soll eine Batch aus Verzeichnis A im Verzeichnis B ausführen?
Grüße
Johannes

Anzeige
AW: frage zum shell-befehl
01.08.2008 15:34:05
Ramses
Hallo
"...Dos soll eine Batch aus Verzeichnis A im Verzeichnis B ausführen..."
Nur wenn die Batch Datei entsprechend vorbereitet ist.
Siehe dazu den Beitrag von Reinhard indem er die Variablen Verwendung in der Batch Datei erklärt.
Dann kannst du in der SHELL-Anweisung als Parameter einen anderen Pfad angeben und den innerhalb der batchdatei verwenden.
Allerdings verstehe ich die Verwendung von BATCH Dateien ehrlich gesagt nicht mehr.
Warum machst du das ganze nicht einfach in VBA ?
Gruss Rainer

AW: frage zum shell-befehl
01.08.2008 15:46:00
JStadler
Hallo Rainer,
tja, um Dos oder Unix kommt man hier nicht herum. Wir arbeiten mit einem Programm zur Datenauswertung, was in diesem Bereich nach wie vor Nonplusultra ist. Dafür ist auch ab und an eine Batch, bzw. Shell nötig :)
Die Verknüpfung zwischen Excel-VBA und Dos hatte ich allerdings jetzt zum ersten (aber bestimmt nicht letzten) Mal. Daher sind alle hier gemachten Ausführungen für mich mehr als nützlich.
Vielen Dank für Deine Hilfe. Gleiches gilt auch für Reinhard.
Wie immer ein dickes dickes Lob an dieses geniale Forum.
Viele Grüße
Johannes

Anzeige
AW: frage zum shell-befehl
01.08.2008 14:20:00
Reinhard
Hi Johannes,
hilft dir das weiter, wenn nicht, zeige mal den Inhalt deiner Batch:

Sub tt()
Dim Merker, X
Merker = CurDir
ChDrive "H"
ChDir "H:\kurz"
X = Shell("cmd.exe /c dir *.* > H:\Look.txt")
MsgBox "H:\look.txt existiert"
X = Shell("cmd.exe /c del H:\look.txt")
MsgBox "H:\look.txt existiert nicht mehr"
ChDrive Merker
ChDir Merker
End Sub


'


Sub tt2()
Dim Merker, X
Merker = CurDir
ChDrive "H"
ChDir "H:\kurz"
X = Shell("cmd.exe /c dir *.* > H:\Look.txt")
MsgBox "H:\look.txt existiert"
X = Shell("cmd.exe /c H:\MeineBatch.bat h:\look.txt")
MsgBox "H:\look.txt existiert nicht mehr"
ChDrive Merker
ChDir Merker
End Sub


'
'wobei dann MeineBatch.bat den Inhalt hat:
'del %%1
'du kannst max 9 Parameter %%1-%%9 mitübergeben, %%0 ist der eigene Name der Batch
Gruß
Reinhard

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige