fuersorger: Variablenwert als Parameter in der Shell übergeben

Ich bin am Verzweifeln. Überall gesucht. Nichts gefunden ! fast 24 Stunden
Problem: im nachfolgenden Quelltext bekommen ich den Wert der Variable patheingang
im Aufruf wshShell2 für Parmeter2 nicht übergeben. (Gebe ich den Pfad wie im Beispiel direkt ein, läuft es) Ich wünsche mir jedoch das der Variablenwert vom Pfadinput im Parameter2 automatisch übernommen wird. Wer weiß Rat ? Ich habe schon unzählige Varianten ausprobiert - bisher keine Lösung

<body>

<script type="text/javascript">
    var patheingang    = "";
     function speichern() {
        patheingang        = document.getElementById('patheingang').value;
          if ((patheingang == "")) {
        alert("Füllen sie alle Felder aus.");
        }
        else {
        return;
        }
   }

function ausgeben() {
        if ((patheingang == "" )) {
        alert("Sie müssen zuerst Speichern drücken.");
        }
        else {
         document.getElementById("satz").innerHTML =
        "<br> patheingang &nbsp; = " + patheingang ;
        return;
        }
    }

function schreibe() {document.getElementById("satz").innerHTML = patheingang;}

wshShell2 = new ActiveXObject("WScript.Shell");
var parameter1 = "/K ffplay.exe";
var parameter2 = "C:\exampel\test.mp4"; // hier soll nur der Wert von patheingang rein
var aufruf2 = "cmd.exe" + " " + parameter1 + " " + parameter2 ;

</script>

<div class="input">
<input type="file" name="patheingang"   id= "patheingang"   style="width: 546; height: 26" size="100"><p>
<button onclick="speichern();"       >Speichern</button>&nbsp;&nbsp;
<button onclick="return ausgeben();"        >Ausgeben</button>&nbsp;&nbsp;
<button onclick=" return wshShell2.Run(aufruf2);"        >play w2     </button>&nbsp;
         </button>&nbsp;<button onclick="return l&ouml;schen();"    >Löschen
</button></p>
<p><br>
</div>

<div class="ausgabe">
    <a id="satz" class="ausgabeunten"></a>
</div>

</body>
</html>

  1. Meine Herren!

    (Gebe ich den Pfad wie im Beispiel direkt ein, läuft es) Ich wünsche mir jedoch das der Variablenwert vom Pfadinput im Parameter2 automatisch übernommen wird. Wer weiß Rat ? Ich habe schon unzählige Varianten ausprobiert - bisher keine Lösung

    Hast du dir mal anzeigen lassen, was der folgende Ausdruck liefert?
    document.getElementById('patheingang').value;

    Das Ergebnis dürfte [W3C] nur der Dateiname ohne den absoluten Pfad sein. Wenn ich mir deinen weiteren Code ansehe, dann macht es allerdings den Eindruck auf mich, als erwartest du einen absoluten Pfad:

    var parameter2 = "C:\\exampel\test.mp4"; // <- absolute Pfad

    --
    “All right, then, I'll go to hell.” – Huck Finn
    1. Meine Herren!

      (Gebe ich den Pfad wie im Beispiel direkt ein, läuft es) Ich wünsche mir jedoch das der Variablenwert vom Pfadinput im Parameter2 automatisch übernommen wird. Wer weiß Rat ? Ich habe schon unzählige Varianten ausprobiert - bisher keine Lösung

      Hast du dir mal anzeigen lassen, was der folgende Ausdruck liefert?
      document.getElementById('patheingang').value;

      Das Ergebnis dürfte [W3C] nur der Dateiname ohne den absoluten Pfad sein. Wenn ich mir deinen weiteren Code ansehe, dann macht es allerdings den Eindruck auf mich, als erwartest du einen absoluten Pfad:

      var parameter2 = "C:\\exampel\test.mp4"; // <- absolute Pfad

      Ich habe das mal wie folgt eingegeben; es tut sich dann aber garnichts mehr:

      wshShell2 = new ActiveXObject("WScript.Shell");
      var parameter1 = "/K ffplay.exe";
      var parameter2 = document.getElementById('patheingang').value;  // hier soll nur der Wert von patheingang übergeben
      var aufruf2 = "cmd.exe" + " " + parameter1 + " " + parameter2 ;

      Ja sicher wäre mir der absolte Pfad am liebsten.  Der ist ja auch in der Variable je
      nach input korrekt so abgepeichert. Die funktion Ausgabe liefert jedenfalls den korrekten Pfad
      von patheingang zurück.

      Irgend eine Idee?

      1. Meine Herren!

        Ja sicher wäre mir der absolte Pfad am liebsten.  Der ist ja auch in der Variable je
        nach input korrekt so abgepeichert. Die funktion Ausgabe liefert jedenfalls den korrekten Pfad
        von patheingang zurück.

        Nein, die Funktion "Ausgabe" hat zunächst mal keinen Rückgabewert. Und das was die Funktion in #satz schreibt dürfte wie gesagt nur der Dateiname ohne Pfad sein. Die entsrechende Stelle in der Spezifikation habe ich dir ja bereits verlinkt.

        --
        “All right, then, I'll go to hell.” – Huck Finn
        1. Meine Herren!

          Ja sicher wäre mir der absolte Pfad am liebsten.  Der ist ja auch in der Variable je
          nach input korrekt so abgepeichert. Die funktion Ausgabe liefert jedenfalls den korrekten Pfad
          von patheingang zurück.

          Nein, die Funktion "Ausgabe" hat zunächst mal keinen Rückgabewert. Und das was die Funktion in #satz schreibt dürfte wie gesagt nur der Dateiname ohne Pfad sein. Die entsrechende Stelle in der Spezifikation habe ich dir ja bereits verlinkt.

          Ich habe es nochmals mit dem IE geprüft - (Firefox geht nicht) :

          nach dem vorherigen Speichern : kommt in der Ausgabe exakt der gleiche Wert wie ich gewählt habe zurück- mit dem vollen Pfad.

          Danke für den Link, ich habe aber Schierigkeiten, das zum Script in Einklang zu bringen,
          ich kann nicht erkennen was da weiterhelfen könnte ?????

          1. Meine Herren!

            nach dem vorherigen Speichern : kommt in der Ausgabe exakt der gleiche Wert wie ich gewählt habe zurück- mit dem vollen Pfad.

            Welchen Internet Explorer benutzt du denn bitte? Ich habe leider keinen Internet Explorer zum Testen griffbereit, aber ich kann mir nicht vorstellen, dass ein aktueller IE diesen Bug haben könnte, nicht zuletzt, weil das als Sicherheitslücke betrachtet wird.

            Mir ist aber noch eine andere Kleinigkeit aufgefallen:

            "C:\exampel\test.mp4";

            \t ist die Escape-Sequenz für den Tabulator, dieser Ausdruck wird deshalb evaluiert zu dem String:

            "C:\exampel est.mp4"

            Danke für den Link, ich habe aber Schierigkeiten, das zum Script in Einklang zu bringen,

            ich kann nicht erkennen was da weiterhelfen könnte ?????

            Das ist die formale Spezifikation von HTML. Da steht auch folgender Satz:
            "File names must not contain path components".
            Weiter unten steht dort:
            "For historical reasons, the value IDL attribute prefixes the file name with the string "C:\fakepath"."

            --
            “All right, then, I'll go to hell.” – Huck Finn
            1. Meine Herren!

              nach dem vorherigen Speichern : kommt in der Ausgabe exakt der gleiche Wert wie ich gewählt habe zurück- mit dem vollen Pfad.

              Welchen Internet Explorer benutzt du denn bitte? Ich habe leider keinen Internet Explorer zum Testen griffbereit, aber ich kann mir nicht vorstellen, dass ein aktueller IE diesen Bug haben könnte, nicht zuletzt, weil das als Sicherheitslücke betrachtet wird.

              Mir ist aber noch eine andere Kleinigkeit aufgefallen:

              "C:\exampel\test.mp4";

              \t ist die Escape-Sequenz für den Tabulator, dieser Ausdruck wird deshalb evaluiert zu dem String:

              "C:\exampel est.mp4"

              Danke für den Link, ich habe aber Schierigkeiten, das zum Script in Einklang zu bringen,
              ich kann nicht erkennen was da weiterhelfen könnte ?????

              Das ist die formale Spezifikation von HTML. Da steht auch folgender Satz:
              "File names must not contain path components".
              Weiter unten steht dort:
              "For historical reasons, the value IDL attribute prefixes the file name with the string "C:\fakepath"."

              Ist. IE 10  genau 10.0.9
              Im IE geht das : Hier sie mal ein Bild :  http://knoeffelbau.de/bilder/IE-ffm.jpg

              Habe es mal mit Firefox über Server getetest: http://knoeffelbau.de/anfrage/ffmpeg20.html
              Da läuft es so wie du es schon erkannt hast.

              Ja? wie könnte man das lösen ? Vieleicht können wir morgen nochmal kommunizieren ?!

              1. Meine Herren!

                Ist. IE 10  genau 10.0.9
                Im IE geht das : Hier sie mal ein Bild :  http://knoeffelbau.de/bilder/IE-ffm.jpg

                Habe es mal mit Firefox über Server getetest: http://knoeffelbau.de/anfrage/ffmpeg20.html
                Da läuft es so wie du es schon erkannt hast.

                Interessant. Was macht denn der IE, wenn du die Seite vom Server lädst und nicht vom lokalen Dateisystem? Gibt er dann auch den gesamten Pfad aus?

                --
                “All right, then, I'll go to hell.” – Huck Finn
                1. Meine Herren!

                  Ist. IE 10  genau 10.0.9
                  Im IE geht das : Hier sie mal ein Bild :  http://knoeffelbau.de/bilder/IE-ffm.jpg

                  Habe es mal mit Firefox über Server getetest: http://knoeffelbau.de/anfrage/ffmpeg20.html
                  Da läuft es so wie du es schon erkannt hast.

                  Interessant. Was macht denn der IE, wenn du die Seite vom Server lädst und nicht vom lokalen Dateisystem? Gibt er dann auch den gesamten Pfad aus?

                  ja macht er auch. Allerdings kann man ffplay (gehört zu ffmpeg) dann nicht aufrufen.
                  Ingesamt hattest du aber trotzdem recht, mit dem fakepath, dass hatte ich auch am Anfang, bis ich
                  die Abfrage auf die jetzige Lösung umgestellt habe.

                  Ist übrigens auch überall zu lesen das verschiedene Javascripte sich unterschiedlich auf verschiedene
                  Browsern verhalten. Für mich, der zum ersten mal was mit Java macht, ist das schwer zu verstehen.

                  Mal ein Beispiel- dass hier läuft bei mir weder in firefox noch in IE

                  function Openffmpeg()
                  {
                  var volume = "C:\";
                  var fullPath = "volume" + "ffmpeg.exe ";
                  var WshShell = new ActiveXObject("WScript.Shell");
                  var oExec = WshShell.Exec(fullPath);
                  }

                  Da kommt das nächste Problem auf mich zu. Ich mach das, um Filme gut und einfach umrechnen zu können. FFmpeg (incl. ffplay) sind bei mir global deklariert, viele kriegen das aber nicht hin...

                  1. Hallo,

                    Ist übrigens auch überall zu lesen das verschiedene Javascripte sich unterschiedlich auf verschiedene Browsern verhalten. Für mich, der zum ersten mal was mit Java macht, ist das schwer zu verstehen.

                    es gibt wohl geringfügige Unterschiede von Browser zu Browser, aber die dürften eigentlich nur in seltenen Fällen eine Rolle spielen.

                    Außerdem: Obacht - Java und Javascript sind zwei völlig unterschiedliche Dinge!

                    function Openffmpeg()

                    {
                    var volume = "C:\";
                    var fullPath = "volume" + "ffmpeg.exe ";    // hoppla!
                    var WshShell = new ActiveXObject("WScript.Shell");
                    var oExec = WshShell.Exec(fullPath);
                    }

                      
                    Das kann schon mal nur im IE funktionieren, weil kein anderer ActiveX kennt (ist eine reine Microsoft-Erfindung). Und der Grund, warum es im IE auch nicht tut, was du erwartest, liegt in der Zeile, die ich dir markiert habe. Dort baust du den String fullPath zusammen, der dann exakt "volumeffmpeg.exe " lautet. Damit kann der Shell-Aufruf sicher nichts anfangen.  
                      
                    Du meintest in der fraglichen Zeile wohl die vorher gesetzte Variable volume, nicht die Stringkonstante "volume".  
                      
                    
                    > Da kommt das nächste Problem auf mich zu. Ich mach das, um Filme gut und einfach umrechnen zu können. FFmpeg (incl. ffplay) sind bei mir global deklariert, viele kriegen das aber nicht hin...  
                      
                    Hä? Was meinst du mit "global deklariert"? Dass sie im Suchpfad stehen? - Dann solltest du sie auch aufrufen, ohne explizit ein Verzeichnis anzugeben, denn dann wird \_nur dieses\_ durchsucht.  
                    Und was meinst du mit "viele kriegen das nicht hin"?  
                      
                    So long,  
                     Martin  
                    
                    -- 
                    Das Gehirn ist schon eine tolle Sache: Es fängt ganz von allein an zu arbeiten, wenn man morgens aufsteht, und hört erst damit auf, wenn man in der Schule ankommt.  
                      (alte Schülererkenntnis)  
                    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                    
                    1. Hallo,

                      Ist übrigens auch überall zu lesen das verschiedene Javascripte sich unterschiedlich auf verschiedene Browsern verhalten. Für mich, der zum ersten mal was mit Java macht, ist das schwer zu verstehen.

                      es gibt wohl geringfügige Unterschiede von Browser zu Browser, aber die dürften eigentlich nur in seltenen Fällen eine Rolle spielen.

                      Außerdem: Obacht - Java und Javascript sind zwei völlig unterschiedliche Dinge!

                      function Openffmpeg()

                      {
                      var volume = "C:\";
                      var fullPath = "volume" + "ffmpeg.exe ";    // hoppla!
                      var WshShell = new ActiveXObject("WScript.Shell");
                      var oExec = WshShell.Exec(fullPath);
                      }

                      
                      >   
                      > Das kann schon mal nur im IE funktionieren, weil kein anderer ActiveX kennt (ist eine reine Microsoft-Erfindung). Und der Grund, warum es im IE auch nicht tut, was du erwartest, liegt in der Zeile, die ich dir markiert habe. Dort baust du den String fullPath zusammen, der dann exakt "volumeffmpeg.exe " lautet. Damit kann der Shell-Aufruf sicher nichts anfangen.  
                      >   
                      > Du meintest in der fraglichen Zeile wohl die vorher gesetzte Variable volume, nicht die Stringkonstante "volume".  
                      >   
                      > > Da kommt das nächste Problem auf mich zu. Ich mach das, um Filme gut und einfach umrechnen zu können. FFmpeg (incl. ffplay) sind bei mir global deklariert, viele kriegen das aber nicht hin...  
                      >   
                      > Hä? Was meinst du mit "global deklariert"? Dass sie im Suchpfad stehen? - Dann solltest du sie auch aufrufen, ohne explizit ein Verzeichnis anzugeben, denn dann wird \_nur dieses\_ durchsucht.  
                      > Und was meinst du mit "viele kriegen das nicht hin"?  
                      >   
                      > So long,  
                      >  Martin  
                      >   
                      
                      \*\*  var fullPath = "volume" + "ffmpeg.exe ";    // hoppla! \*\*\*  
                           Ja ... jetzt muss ich sebst lachen .... danke  
                        
                      \*\*  Hä? Was meinst du mit "global deklariert"?  \*\*\*  
                          In Windows global, so das ffmpeg aus jede Verzeichnis getartet werden kann, so wie die cmd.exe  
                      
                      
                      1. Hi,

                        Hallo,
                        [...]
                        So long,
                        Martin

                        bitte keine Vollzitate (TOFU)! Das ist ärgerlich und lästig.

                        **  var fullPath = "volume" + "ffmpeg.exe ";    // hoppla! ***
                             Ja ... jetzt muss ich sebst lachen .... danke

                        Tja, es sind oft die Kleinigkeiten, die man übersieht. :-)

                        Hä? Was meinst du mit "global deklariert"?  ***
                        In Windows global, so das ffmpeg aus jede Verzeichnis getartet werden kann, so wie die cmd.exe

                        Also das, was ich vermutet habe: Im Suchpfad. Dann gilt, was ich sagte:

                        Dann solltest du sie auch aufrufen, ohne explizit ein Verzeichnis anzugeben, denn dann wird _nur dieses_ durchsucht.

                        Ciao,
                         Martin

                        --
                        F: Was sagt die kleine Kerze zur großen Kerze?
                        A: Ich gehe heute nacht aus!
                        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. Meine Herren!

    var parameter1 = "/K ffplay.exe";
    var parameter2 = "C:\exampel\test.mp4"; // hier soll nur der Wert von patheingang rein
    var aufruf2 = "cmd.exe" + " " + parameter1 + " " + parameter2 ;

    Ich hab den Baum vor lauter Wäldern nicht gesehen. Dieser Code wird im moment einmalig ausgeführt, wenn das Skript geladen wurde. Das Kommando muss aber neu zusammen gebastelt werden, wenn der Speichern-Button gedrückt wird. Dieser Code gehört also mit in die save-Funktion. Die Variable aufruf2 muss allerdings global sein. Insgesamt ergibt sich:

    var aufruf2;  
    function speichern() {  
       patheingang = document.getElementById('patheingang').value;  
       if ((patheingang == "")) {  
          alert("Füllen sie alle Felder aus.");  
       } else {  
          var parameter1 = "/K ffplay.exe";  
          var parameter2 = patheingang;  
          aufruf2 = "cmd.exe" + " " + parameter1 + " " + parameter2 ;  
       }  
    }
    
    --
    “All right, then, I'll go to hell.” – Huck Finn
    1. Meine Herren!

      var parameter1 = "/K ffplay.exe";
      var parameter2 = "C:\exampel\test.mp4"; // hier soll nur der Wert von patheingang rein
      var aufruf2 = "cmd.exe" + " " + parameter1 + " " + parameter2 ;

      Ich hab den Baum vor lauter Wäldern nicht gesehen. Dieser Code wird im moment einmalig ausgeführt, wenn das Skript geladen wurde. Das Kommando muss aber neu zusammen gebastelt werden, wenn der Speichern-Button gedrückt wird. Dieser Code gehört also mit in die save-Funktion. Die Variable aufruf2 muss allerdings global sein. Insgesamt ergibt sich:

      var aufruf2;

      function speichern() {
         patheingang = document.getElementById('patheingang').value;
         if ((patheingang == "")) {
            alert("Füllen sie alle Felder aus.");
         } else {
            var parameter1 = "/K ffplay.exe";
            var parameter2 = patheingang;
            aufruf2 = "cmd.exe" + " " + parameter1 + " " + parameter2 ;
         }
      }

        
      Danke !  
      Das probier ich gleich mal und melde mich danach gleich
      
    2. Meine Herren!

      var parameter1 = "/K ffplay.exe";
      var parameter2 = "C:\exampel\test.mp4"; // hier soll nur der Wert von patheingang rein
      var aufruf2 = "cmd.exe" + " " + parameter1 + " " + parameter2 ;

      Ich hab den Baum vor lauter Wäldern nicht gesehen. Dieser Code wird im moment einmalig ausgeführt, wenn das Skript geladen wurde. Das Kommando muss aber neu zusammen gebastelt werden, wenn der Speichern-Button gedrückt wird. Dieser Code gehört also mit in die save-Funktion. Die Variable aufruf2 muss allerdings global sein. Insgesamt ergibt sich:

      var aufruf2;

      function speichern() {
         patheingang = document.getElementById('patheingang').value;
         if ((patheingang == "")) {
            alert("Füllen sie alle Felder aus.");
         } else {
            var parameter1 = "/K ffplay.exe";
            var parameter2 = patheingang;
            aufruf2 = "cmd.exe" + " " + parameter1 + " " + parameter2 ;
         }
      }

        
      Super das läuft-   Danke, danke, danke  
        
      Ich habe dann später noch mal ein Frage   .......
      
      1. Om nah hoo pez nyeetz, fuersorger!

        Ich habe dann später noch mal ein Frage   .......

        Bitte beachte dann, dass in diesem Forum Vollzitate weder notwendig noch erwünscht sind. Schade, dass du dich mit deinem Antwortstil nicht Martin oder 1UnitedPower angepasst hast. Hast du eine Vorstellung, wie lang so ein Thread wird, wenn jeder immer alles zitiert und wie oft man dann dasselbe lesen muss, bis man zu den Neuigkeiten kommt?

        Matthias

        --
        Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Reif und Reifrock.

        1. Mahlzeit,

          Bitte beachte dann, dass in diesem Forum Vollzitate weder notwendig noch erwünscht sind.

          Vielleicht würde da Abhilfe schaffen, wenn das Zitat erst auf Tastendruck eingefügt wird. Dürfte nicht schwer umzusetzen sein.

          PS: Jetzt hab ich erst mal den

          --
          42
          1. Mahlzeit,

            PS: Jetzt hab ich erst mal den

            Das fehlt noch "Absende-Button gesucht". Und schon auf Enter gekommen und unbeabsichtigt abgeschickt ;)

            --
            42