öffnende .bat auslesen

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von chagl.

    öffnende .bat auslesen

    Hallo,

    ich hab mir ein kleines Programm geschrieben (so gut man das als Anfänger macht :/ ), in dem ich eine .bat in einen String speicher, mit Hilfe dieses Strings eine Datei öffne und mit einem neuen Namen wieder abspeicher.
    Jetzt bin ich an meine Grenzen gestoßen und der Google weiß auch nicht mehr weiter.

    Problem: Mein Programm soll von einer .bat gestartet werden, welche folgende Zeile enthält "Pfad\Programm.exe "variablerPfad\input\zuÖffnendeDatei.sldasm" "variablerPfad\inDenGespeichertWird\output\"" erstes und letztes " ausgeschlossen. Jetzt will ich diesen Text in einen String einlesen, was nicht ganz so einfach ist, da diese .bat immer in "variablerPfad\inDenGespeichertWird\" liegt und eine fortlaufende Nummer als Namen hat.

    Im Moment lese ich noch eine statische .bat ein

    VB.NET-Quellcode

    1. Imports System.IO
    2. Dim tr As IO.TextReader = New IO.StreamReader("D:\Temp\A74EA1DDC3\output\000123456_000.bat")


    Gibt es da eine Möglichkeit das irgendwie zu realisieren?
    Hallo,

    ich verstehe die Frage nicht so ganz. Aber da Du hier offensichtlich mit SolidWorks-DAteien arbeitest habe ich die Vermutung dass sich das ganze direkt in SolidWorks besser und sauberer automatisieren ließe. Damit kenne ich mich einigermaßen aus. Wenn Du magst kannst Du mir ja mal das eigentliche Problem schildern...
    Mit Solidworks allein wird sich das ganze nicht lösen lassen, da ich eine Solidworksdatei und eine eDrawings.htm konvertieren will. Das kann Solidworks nicht allein. Das kann nur eDrawings. eDrawings Control kann man in vb als Tool einbinden. Der Teil von meinem Programm, der das ganze konvertiert funktioniert hervorragend.

    Ich will mein Programm mit einer beliebigen .bat starten. (.bat ändert ständig seinen Namen und Speicherort)
    Dann will ich alles auslesen, was in dieser .bat drin steht.

    Ich weiß gerade nicht wie ich es einfacher beschreiben soll.
    Hmm - OK. Soweit ist's ja OK wenn Du das eDrawings-Control schon verwendest.
    Aber warum um alles in der Welt brauchst Du dann eine .bat und warum muss die auch noch ihren Speicherort ändern? Kannst Du nicht im VB-Programm ein Suchkriterium wie z.B. Teilenummer, DAteinamen o.ä. angeben und das Programm dann selbständig suchen lassen wo die entsprechenden Dateien herumliegen?

    chagl schrieb:

    Jetzt will ich diesen Text in einen String einlesen
    Nimm dazu die mächtigen Funktionen des IO.File-Namespaces:

    VB.NET-Quellcode

    1. Dim txt = IO.File.ReadAllText("D:\Temp\A74EA1DDC3\output\000123456_000.bat")
    2. IO.File.WriteAllText("D:\Temp\A74EA1DDC3\output\000123456_000.bat.bat", txt)

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Die bat und die zugehörigen Ordner werden von einem anderen Programm erzeugt und ausgeführt und ich muss das leider als gottgegeben annehmen. (Für jede Datei die ich konvertieren will gibt es eine neue .bat in einem neuen Pfad)
    Ich les mich noch ein bisschen mehr in vb ein. Vielleicht geht da noch was.

    chagl schrieb:

    eine neue .bat in einem neuen Pfad
    Wo ist das Problem?
    Die Rahmenhandlung hab ich Dir oben gepostet.
    Nimm ggf. ReadAllLines und WriteAllLines, da löst sich Dein Problem praktisch von allein. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:


    VB.NET-Quellcode

    1. Dim txt = IO.File.ReadAllText("D:\Temp\A74EA1DDC3\output\000123456_000.bat")
    2. IO.File.WriteAllText("D:\Temp\A74EA1DDC3\output\000123456_000.bat.bat", txt)



    Wenn ich das richtig verstehe nimmst du einen festen Pfad usw.

    Ich hab festgestellt, dass das mit folgendem Code gehen sollte

    VB.NET-Quellcode

    1. Environment.GetCommandLineArgs()

    chagl schrieb:

    Wenn ich das richtig verstehe
    bekommst Du von mir einen Hinweis, wie Dein Problem zu lösen ist. Wer hindert Dich daran, meinen festen Pfad durch eine Variable Deines Inhalts zu ersetzen?
    Etwas Eigeninitiative ist hier schon gefordert. 8o

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich glaube, jetzt verstehe ich langsam Dein Problem:
    Dein Programm wird von einer .bat-DAtei aufgerufen und Du willst wissen welche .bat-Datei die Schuldige war:-) - richtig?
    In dem Fall könnte Dir schon Environment.GetCommandLineArgs() weiterhelfen. Wenn der im 1.Post angedeutete Aufbau der .bat korrekt ist müßtest Du mit Environment.GetCommandLineArgs(0) den Pfad der zu öffnenden Datei und mit Environment.GetCommandLineArgs(1) den Pfad zum Speichern erhalten können.

    Thisoft schrieb:

    Environment.GetCommandLineArgs(0)
    enthält den eigenen Pfad.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    So funktioniert es. txt(0) gibt den Pfad des Programms wieder, txt(1) gibt den ersten String wieder und so weiter

    VB.NET-Quellcode

    1. Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
    2. Dim txt() As String = Environment.GetCommandLineArgs()
    3. MsgBox(txt(0) & vbCrLf & vbCrLf & txt(1) & vbCrLf & vbCrLf & txt(2))
    4. End Sub

    Mircosofter2206 schrieb:

    Bei mir gibt Environment.GetCommandLineArgs(0) das erste Argument aus
    Nein. ;)

    @chagl Und jetzt noch etwas mehr .NET und Kompatiblität:

    VB.NET-Quellcode

    1. Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
    2. Dim args As String() = Environment.GetCommandLineArgs()
    3. MessageBox.Show(args(0) & Environment.NewLine & args(1) & Environment.NewLine & args(2))
    4. End Sub


    Ja, ich weiß, Konstanten sind eigentlich nur entsprechende Felder und gehen eigentlich in Ordnung, aber sie sind trotzdem ein Microsoft.VisualBasic-Namespace-Relikt und würde man den entfernen, wären sie eh weg. Zumal Du hiermit auch den Zeilenumbruch an die Umgebung entsprechend angepasst hast.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Jou, da kann man dann ggf. mit 'nem StringBuilder arbeiten oder einfacher sogar mit String.Join.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    nachdem ich jetzt die Argumente aus der CommandLine gelesen habe muss ich ein weiteres Argument reinschreiben (Zeilenumbruch + String).
    Irgendwie find ich da nichts, was für mich funktioniert.

    Vermutlich gibt's es da einen einfachen Einzeiler aber ich steh gerade maximal auf dem Schlauch.
    Wäre super, wenn ihr da was habt