Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  VBasic / vb.net / vbs / wsh
  VBA: Dateisuche mit Batchdatei

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  VBA: Dateisuche mit Batchdatei (378 / mal gelesen)
KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2657
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
Dell Precision 7540 mobile Workstation,
64GB, Quadro RTX 3000;
SWX2020 SP5;
SAP/PLM+ECTR;
DriveWorks Pro;
Programmierung: VBA, aktuell Visual Studio 2017/VB.Net

erstellt am: 13. Okt. 2020 11:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


vbaFileSearch.png

 
Hallo,

ich mal wieder.

Ich versuche, über den Umweg einer Batch-Datei, eine Dateisuche in VBA zu erstellen.
Mein Code so weit, hier versuche ich beispielsweise die Datei gswin64.exe im Verzeichnis "c:\program files" zu finden:

Code:
Function FindFile(Basepath, filename) As String
'Suche Datei "filename" rekursiv im Basisverzeichnis "Basepath"
Dim lngTaskID As Long
Dim myBatch As String
Dim myCommand As String

'Hilfskonstrukt: Batchdatei mit dem Where-Befehl
myBatch = Environ("temp") & "\tmp.cmd"

Debug.Print "CMD-Datei: " & myBatch

'Batch-Datei erstellen:
Open myBatch For Output As #1
Print #1, "@echo on"
Print #1, "REM suche " & filename
'der auszuführende Befehl:
Print #1, "where /R """ & Basepath & """ """ & filename & """>""%temp%\gs.txt"""
Print #1, "type ""%temp%\gs.txt"""
Print #1, "Pause"
Close

'Batchdatei ausführen:
lngTaskID = Shell(myBatch, vbNormalFocus)

'Ergebnis-Datei gs.txt auslesen:
'fehlt noch
FindFile= ""
End Function

Sub test()
    Dim strdummy As String
    strdummy = FindFile("%programfiles%", "gswin64.exe")
End Sub



Der Code läuft so weit, die Batchdatei wird erstellt und ausgeführt- aber die Ergebnis-Datei gs.txt ist immer leer, die gesuchte Datei wird nicht gefunden.

Wenn ich die erstellte Batchdatei aber manuell ausführe, dann funktioniert sie und findet meine gswin64.exe, das Ergebnis steht dann in der gs.txt

Was mache ich hier falsch?

Noch ne Frage nebenbei: Wieso wird bei der Ausgabe statt der spitzen Klammer > immer ein 1> ausgegeben? Ist mir in anderen Zusammenhängen auch schon aufgefallen. Keine Ahnung, ob das irgendeine Bedeutung hat.


------------------
Klaus

http://www.alko-tech.com | mein Gästebuch

[Diese Nachricht wurde von KMassler am 13. Okt. 2020 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2657
Registriert: 06.11.2000

erstellt am: 13. Okt. 2020 11:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich habs selbst gefunden und will es euch nicht vorenthalten:

Wir haben die 32bit-Vesion von Office installiert.

Wenn ich hier eine Batch-Datei starte, wird offenbar einer 32bit-Version des Kommando-Interpreters genutzt, und der interpretiert die Umgebungs-Variable "ProgramFiles" als "c:\Program Files (x86)".
Im manuell gestarteten cmd-Fenster auf einem 64bit-System ist das immer "c:\Program Files".

Um in der 32bit-Umgebung auf das "c:\Program Files" zu verweisen, muss ich die Variable "ProgramW6432" verwenden, dann funktioniert es!

------------------
Klaus

http://www.alko-tech.com | mein Gästebuch

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz