exe Datei zum Öffnen einer anderen Datei
Hallo, ich ein kompletter Anfänger, der ein kleines Programm schreiben wollte, um einen Löschvorgang zu automatisieren.
Irgendwann hatte ich dann eine Batch-Datei, die ihren Zweck erfüllte. Soll heißen, sie sucht die Datei erst auf Basis ihrer Dateinamenserwiterung und ruft ein Programm auf, um die heruntergeladene Datei zu öffnen und zu verarbeiten. Danach löscht sie alles, was ich nicht brauche.
Nun wollte ich aber nicht jedes Mal jedes Mal erst die Datei herunterladen und dann meine Batch starten, also dachte ich mir ich kompiliere sie in eine ausführbare Datei und benutze sie, um damit gleich die herunterzuladene Datei zu öffnen und nach ein bisschen herumprobieren habe ich es dann hinbekommen.
Das Problem ist, dass der Lösch-Anteil des Codes nicht ausgeführt wird, wenn ich die Datei zum Öffnen verwende. Starte ich das Programm alleine klappt alles und ich bin jetzt ziemlich ratlos. Es wäre echt nett, wenn jemadn helfen könnte. Das ist übgrigens mein erster Beitrag, also habt bitte Nachsicht :D Ich bin mir auch nicht sicher, welches Thema hier richtig wäre lol
Irgendwann hatte ich dann eine Batch-Datei, die ihren Zweck erfüllte. Soll heißen, sie sucht die Datei erst auf Basis ihrer Dateinamenserwiterung und ruft ein Programm auf, um die heruntergeladene Datei zu öffnen und zu verarbeiten. Danach löscht sie alles, was ich nicht brauche.
Nun wollte ich aber nicht jedes Mal jedes Mal erst die Datei herunterladen und dann meine Batch starten, also dachte ich mir ich kompiliere sie in eine ausführbare Datei und benutze sie, um damit gleich die herunterzuladene Datei zu öffnen und nach ein bisschen herumprobieren habe ich es dann hinbekommen.
Das Problem ist, dass der Lösch-Anteil des Codes nicht ausgeführt wird, wenn ich die Datei zum Öffnen verwende. Starte ich das Programm alleine klappt alles und ich bin jetzt ziemlich ratlos. Es wäre echt nett, wenn jemadn helfen könnte. Das ist übgrigens mein erster Beitrag, also habt bitte Nachsicht :D Ich bin mir auch nicht sicher, welches Thema hier richtig wäre lol
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 353220
Url: https://administrator.de/contentid/353220
Ausgedruckt am: 22.11.2024 um 18:11 Uhr
15 Kommentare
Neuester Kommentar
Ich hab keine Ahnung was du da vorhast.
Mal abgesehen davon, dass das in deinen Scripts auch nicht erfolgt, wo soll denn die Datei herkommen?
Steffen
Mal abgesehen davon, dass das in deinen Scripts auch nicht erfolgt, wo soll denn die Datei herkommen?
Zitat von @Amateur01:
also dachte ich mir ich kompiliere sie in eine ausführbare Datei und benutze sie, um damit gleich die herunterzuladene Datei zu öffnen
Batchdateien lassen sich nicht kompilieren. Du kannst sie in eine Art selbstextrahierendes Archiv oder Installer mit Erweiterung .exe packen lassen. Die packen dann aber auch nur dein Originalscript irgendwo ins %temp% Verzeichnis und führen es aus. Ist also völlig nutzlos und ich weiß auch nicht was das mit deinem Problem zu tun haben soll.also dachte ich mir ich kompiliere sie in eine ausführbare Datei und benutze sie, um damit gleich die herunterzuladene Datei zu öffnen
Zitat von @Amateur01:
Das Problem ist, dass der Lösch-Anteil des Codes nicht ausgeführt wird, wenn ich die Datei zum Öffnen verwende. Starte ich das Programm alleine klappt alles und ich bin jetzt ziemlich ratlos.
Ich verstehe kein Wort, sorry.Das Problem ist, dass der Lösch-Anteil des Codes nicht ausgeführt wird, wenn ich die Datei zum Öffnen verwende. Starte ich das Programm alleine klappt alles und ich bin jetzt ziemlich ratlos.
Steffen
Hab schon an mir gezweifelt. Bin froh, dass es nicht nur mir so geht
Zitat von @Amateur01:
Was ich meinte, ist dass ich anstatt die Datei erst einmal zu speichern und dann das Programm auszuführen, es so wie auf dem Bild machen wollte.
Machst du doch mit dem START Befehl.Was ich meinte, ist dass ich anstatt die Datei erst einmal zu speichern und dann das Programm auszuführen, es so wie auf dem Bild machen wollte.
wenn ich die exe-Datei bentutze um das Heruntergeladene zu öffnen, funktioniert es soweit, dass das Programm aufgerufen wird, aber der Teil danach wird nicht umgesetzt.
Was aber nichts damit zu tun hat, dass du das Script mit diesem Bat2Exe Mist konvertiert hast. Das geht auch mit dem Script pur. Wie schon gesagt, am Ende wird sowieso nur dein Script wieder ausgepackt und ausgeführt.Es wird einfach nichts gelöscht.
Das sieht auch alles ein bisschen suspekt aus. Vielleicht erklärst du einfach mal Schritt für Schritt was wie wo passieren soll. Aus irgendwelchen Gründen scheinen bei dir *.osz Dateien in das TEMP Verzeichnis zu wandern, die du dann öffnest. Soweit so gut. Dann willst du irgendwas aus "%localappdata%\osu!\Songs" auf merkwürdige Art und Weise löschen. Was genau soll denn da passieren?Steffen
(bei der ich den Dateipfad wieder angepasst habe)
Das wäre wohl nicht nötig gewesen. Die Variable %localappdata% zeigt auf das richtige Verzeichnis im Benutzerprofil.Aber wenn ich sie auswähle, um damit die heruntergeladene Datei zu öffnen
Jetzt komm ich langsam dahinter, was du überhaupt vorhast. Du wählst eine bestimmte Datei per Rechtstklick aus und willst sie über das Kontextmenü öffnen. Lässt sich machen. Aber erst noch mal zu der Löschaktion: Wann werden die zu löschenden Dateien erzeugt? Da du diese osu!.exe mit dem START Befehl ausführst, wird diese asynchron ausgeführt. Das bedeutet, das Script wartet nicht darauf bis osu!.exe öffnet, irgendwas macht oder beendet wird, sondern geht direkt zum Löschen. Falls die zu löschenden Dateien erst von osu!.exe erzeugt werden, existieren sie vermutlich nicht, wenn du sie löschen willst. Aber die Info kannst nur du geben...Steffen
OK, verstanden.
Speichere folgenden Code in irgendeine .bat Datei und führe ihn aus.
Jetzt drücke die F5 Taste auf dem Desktop oder einem geöffneten Explorerfenster.
Wenn alles so funktioniert, wie ich mir das denke, dann hast du jetzt bei Rechtsklick auf eine .osz Datei im Menüpunkt "Senden an" ein "osu!"... Teste mal.
Steffen
Speichere folgenden Code in irgendeine .bat Datei und führe ihn aus.
@if (@a)==(@b) @end /*
@echo off &setlocal
2>nul md "C:\myTools"
>"C:\myTools\SendToOsu!.bat" (
echo @echo off ^&setlocal
echo if exist "%%~1\" exit /b
echo if /i "%%~x1" neq ".osz" exit /b
echo start "" "%%localappdata%%\osu!\osu!.exe" %%1
echo ^>nul timeout /t 3 /nobreak
echo for /r "%%localappdata%%\osu!\Songs" %%%%i in ("*.*"^) do if /i "%%%%~xi" neq ".osu" if /i "%%%%~xi" neq ".mp3" del /f "%%%%~i"
)
cscript //nologo //e:jscript "%~fs0"
goto :eof */
var objWSHShell = new ActiveXObject('WScript.Shell'), objShortcut = objWSHShell.CreateShortcut(objWSHShell.SpecialFolders.Item('SendTo') + '\\osu!.lnk');
objShortcut.TargetPath = 'C:\\myTools\\SendToOsu!.bat';
objShortcut.WindowStyle = 7;
objShortcut.Save();
Wenn alles so funktioniert, wie ich mir das denke, dann hast du jetzt bei Rechtsklick auf eine .osz Datei im Menüpunkt "Senden an" ein "osu!"... Teste mal.
Steffen
Nein. Ich freue mich eher über jemanden der nicht nur stumpf Code kopiert.
Der obige Batchcode erstellt ein Verzeichnis "C:\myTools" und schreibt dort eine "SendToOsu!.bat". Danach wird mit einem kurzen JScript eine Verknüpfung auf diese Batchdatei mit Name "osu!" im Verzeichnis
"C:\Users\Bini\AppData\Roaming\Microsoft\Windows\SendTo"
erstellt. Dort befinden sich alle Verknüpfungen, die im "Senden an" Menüpunkt zu finden sind.
Um zu verstehen was in "SendToOsu!.bat" passiert, hier erst mal ein ganz kurzer Beispielcode:
Wenn du eine andere Datei auf dieses Script ziehst, dann öffnet es sich und zeigt dir den vollen Dateiname an. Der Wert der Parametervariablen %1 ist das erste Argument, das an das Script übergeben wurde. In diesem Fall also der Dateipfad.
Genauso verhält es sich nun beim "Senden an" Menü. Der Dateipfad, den du dort an die Verknüpfung übergibst, landet letztlich als %1 im Script "C:\myTools\SendToOsu!.bat". Die hat folgenden Inhalt (kannst du dir natürlich auch live in deinem Verzeichnis ansehen):
Zeilenweise erklärt:
Wenn das übergebene Argument ein Verzeichnis ist (was der Backslash hinter dem Parameter aussagt), dann beende das Script sofort.
Wenn die Dateiendung des übergebenen Arguments nicht ".osz" ist, dann beende das Script sofort.
Starte "osu!.exe" asynchron und übergib den Dateipfad in %1 als Argument.
Warte 3 Sekunden.
Durchsuche "%localappdata%\osu!\Songs" rekursiv nach allen Dateien und weise sie nacheinander in den Schleifeniterationen %%i zu. Wenn die Dateiendung nicht ".osu" und nicht ".mp3" ist, lösche die Datei.
Führe ein
Steffen
Der obige Batchcode erstellt ein Verzeichnis "C:\myTools" und schreibt dort eine "SendToOsu!.bat". Danach wird mit einem kurzen JScript eine Verknüpfung auf diese Batchdatei mit Name "osu!" im Verzeichnis
"C:\Users\Bini\AppData\Roaming\Microsoft\Windows\SendTo"
erstellt. Dort befinden sich alle Verknüpfungen, die im "Senden an" Menüpunkt zu finden sind.
Um zu verstehen was in "SendToOsu!.bat" passiert, hier erst mal ein ganz kurzer Beispielcode:
@echo off
echo %1
pause
Genauso verhält es sich nun beim "Senden an" Menü. Der Dateipfad, den du dort an die Verknüpfung übergibst, landet letztlich als %1 im Script "C:\myTools\SendToOsu!.bat". Die hat folgenden Inhalt (kannst du dir natürlich auch live in deinem Verzeichnis ansehen):
@echo off &setlocal
if exist "%~1\" exit /b
if /i "%~x1" neq ".osz" exit /b
start "" "%localappdata%\osu!\osu!.exe" %1
>nul timeout /t 3 /nobreak
for /r "%localappdata%\osu!\Songs" %%i in ("*.*") do if /i "%%~xi" neq ".osu" if /i "%%~xi" neq ".mp3" del /f "%%~i"
Zeilenweise erklärt:
if exist "%~1\" exit /b
if /i "%~x1" neq ".osz" exit /b
start "" "%localappdata%\osu!\osu!.exe" %1
>nul timeout /t 3 /nobreak
for /r "%localappdata%\osu!\Songs" %%i in ("*.*") do if /i "%%~xi" neq ".osu" if /i "%%~xi" neq ".mp3" del /f "%%~i"
Führe ein
CALL /?
in einem CMD Fenster aus, um zu verstehen was die Modifikatoren mit vorangestelltem ~ Zeichen mit Parameter- und Schleifenvariablen tun.Steffen