RUN startet Datei mit Teilnamen des gewünschten Dateinamens

  • Hi zusammen,

    habe heute folgendes festgestellt, AutoIt 3.3.14.5, Win10

    Wenn in einem Verzeichnis zwei Dateien existieren, deren Dateinamen sich nur am Ende unterscheiden, bspw. "test.exe" und "test neu.exe", dann startet RUN("test neu.exe") die "test.exe" ?!

    Ist das ein bekannter Fehler oder mache ich etwas falsch?

    Testscript "test.au3" compilieren und starten, es wird bei mir nie die Datei "test neu.exe" ausgeführt, sondern nur die Datei "test.exe"


    AutoIt: test.au3
    MsgBox(0, @AutoItPID, @ScriptName )                                           ;Dateinamen anzeigen
    
    $neu = StringReplace(@ScriptName, ".exe", " neu.exe")                                                                         ;Dateinamen umbenennen
    MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '$neu' & @CRLF & @CRLF & 'Return:' & @CRLF & $neu)  ;### Debug MSGBOX
    
    $ret = FileCopy(@ScriptName, $neu)                                                                                            ;neue Datei erstellen
    MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '$ret' & @CRLF & @CRLF & 'Return:' & @CRLF & $ret)  ;### Debug MSGBOX
    
    $PID = Run($neu)                                                                                                              ;neue Datei starten
    MsgBox(262144, 'Debug line ~' & @ScriptLineNumber, 'Selection:' & @CRLF & '$PID' & @CRLF & @CRLF & 'Return:' & @CRLF & $PID)  ;### Debug MSGBOX
  • Testscript "test.au3" compilieren und starten, es wird bei mir nie die Datei "test neu.exe" ausgeführt, sondern nur die Datei "test.exe"

    Wenn man allerdings das Leerzeichen weglässt, passiert das nicht. :/

    Ich habe es mal so gemacht, mit $PID = Run('"' & $neu & '"') ; neue Datei starten :

    Das Skript läuft 'endlos' (quasi wie eine Rekursion - das war vorher aber auch schon so).

    Der Dateiname wird richtig angezeigt, nur halt :

    test neu.exe

    test neu neu.exe

    test neu neu neu.exe

    usw.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ich habe es mal so gemacht, mit $PID = Run('"' & $neu & '"') ; neue Datei starten :

    So klappt es! Klasse!

    Wenn ich aber $PID = Run("test neu.exe")

    eingebe, dann startet wieder die test.exe....

    Aber so kann ich wenigstens weitermachen.

    Danke an alle!

    EDIT:

    Sollte man dafür ein Ticket erstellen?

  • Es ist kein Bug.
    AutoIt führt einfach das Kommando genauso aus wie auf der Kommandozeile (wie Oscar schon bemerkte).

    Im konkreten Fall ruft er das Kommando "test" auf mit dem Parameter "neu.exe". (einfach mal @CmdLineRaw mit ausgeben lassen)

    Das Kommando test findet er als exe-Datei im aktuellen Working-Directory liegen und ruft es entsprechend auf.

    Also im Grunde alles wie es sein sollte.

    Daher entweder schön mit Anführungszeichen arbeiten oder ShellExecute() verwenden.

  • oder ShellExecute()

    Das hatte ich (genauso erfolglos) bereits probiert....

    Das Kommando test findet er als exe-Datei im aktuellen Working-Directory liegen und ruft es entsprechend auf.

    Shellexecute macht ja nichts anderes, außer dass es vorher in der Registry nach "mit der Anweisung verknüpften Programmen" sucht. In diesem Fall nach ausführbaren Dateien, aka Kommandozeile.

  • Andy 17. Januar 2022 um 09:18

    Hat das Label [ gelöst ] hinzugefügt.
  • Shellexecute macht ja nichts anderes, außer dass es vorher in der Registry nach "mit der Anweisung verknüpften Programmen" sucht. In diesem Fall nach ausführbaren Dateien, aka Kommandozeile.

    Prinzipiell ja und doch nein.
    In der Registry steht der Aufruf (über .exe -> exefile -> shell -> open -> command) folgendermaßen da: "%1" %*

    Es wird also das Anführungszeichen immer gesetzt.
    Und da die zugrundeliegende API-Funktion ShellExecuteW die auszuführende Datei (lpFile) und die Aufrufparameter (lpParameters) getrennt entgegen nimmt, kommt am Ende der richtige Pfad mit Klammern herum heraus.

    Daher wundert es mich nicht, dass es mit Shellexecute bei mir funktioniert (gerade wieder getestet), wundere mich im Gegenzug jedoch, dass es bei dir nicht funktionieren soll.

    Kannst ja mal posten, was bei dir unter HKEY_CLASSES_ROOT\exefile\shell\open\command steht.

  • Das ganze bekräftigt mich in meiner Meinung, dass Leerzeichen in Dateinamen nichts verloren haben. Es war nicht alles schlecht in den 1980er Jahren. :D

    OK, 8.3 Dateinamen muss ich auch nicht wieder haben, aber die sonstigen damaligen Restriktionen für Pfade empfand ich schon als sinnvoll. Mir kommen heute noch Umlaute in Pfadangaben "falsch" vor. :/

  • Frage zum Thema: Gibt es sowas wie:

    Code
    AutoItSetOption( "WinTitleMatchMode", 3 ) ;Titel müssen immer exakt übereinstimmen

    nicht auch für Dateinamen?

  • Das ganze bekräftigt mich in meiner Meinung, dass Leerzeichen in Dateinamen nichts verloren haben. Es war nicht alles schlecht in den 1980er Jahren. :D

    jetzt habe ich aber Glück gehabt: Bin nicht der Einzige der das Computerzeitalter der 80er durchgemacht hat ;)

  • Bin nicht der Einzige der das Computerzeitalter der 80er durchgemacht hat

    Willkommen im Club! :klatschen:

    Da ich als DOS-Jünger der ersten Generation auch keine Probleme mit der Konsole/Konsolenanwendungen habe/hatte, stößt mir die o.g. "Lösung" besonders auf.... :rolleyes:

    "Früher" hätte ich das sicher sofort bemerkt. Aber auch bei mir macht sich das fortgeschrittene Alter und die Mausschubserei bemerkbar....