Frage zu batch (cmd ) - Drag und Drop - Bearbeitung bei nicht geschlossenem DOS Fenster
Hallo.
Vielleicht mag meine Frage etwas seltsam sein, jedoch möchte ich gerne
wissen wie das umzusetzen ist:
Angenommen man hat eine cmd Datei, die man per drag & drop benutzt.
Beispiel:
:next
if "%~1" == "" goto done
"mein_prog.exe"
rename -egal "%~1"
shift
goto next
:done
Man wählt seine Dateien, und führt die markierten Dateien auf die cmd.
Danach werden diese bearbeitet und man ist happy.
Wie ist es aber (überhaupt) möglich die cmd zu starten, das dazugehörige Dos Fenster öffnet sich und bleibt bestehen,
sowie erst dann wenn die markierten Dateien (per Drag und Drop - WICHTIG!) auf das Dos Fenster gezogen werden
erfolgt die Bearbeitung?
Ich habe jetzt zig Versuche unternommen indem ich die cmd sogar zu einer EXE umwandelt habe,
cmd /k verwendet, und verschiedene andere Versuche getestet - jedoch alle ohne Erfolg.
Als Laie komme ich einfach nicht weiter, und würde mich über eine Hilfestellung (gern bitte mit einem Beispiel) freuen.
Vielen Dank.
Vielleicht mag meine Frage etwas seltsam sein, jedoch möchte ich gerne
wissen wie das umzusetzen ist:
Angenommen man hat eine cmd Datei, die man per drag & drop benutzt.
Beispiel:
:next
if "%~1" == "" goto done
"mein_prog.exe"
rename -egal "%~1"
shift
goto next
:done
Man wählt seine Dateien, und führt die markierten Dateien auf die cmd.
Danach werden diese bearbeitet und man ist happy.
Wie ist es aber (überhaupt) möglich die cmd zu starten, das dazugehörige Dos Fenster öffnet sich und bleibt bestehen,
sowie erst dann wenn die markierten Dateien (per Drag und Drop - WICHTIG!) auf das Dos Fenster gezogen werden
erfolgt die Bearbeitung?
Ich habe jetzt zig Versuche unternommen indem ich die cmd sogar zu einer EXE umwandelt habe,
cmd /k verwendet, und verschiedene andere Versuche getestet - jedoch alle ohne Erfolg.
Als Laie komme ich einfach nicht weiter, und würde mich über eine Hilfestellung (gern bitte mit einem Beispiel) freuen.
Vielen Dank.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 617188
Url: https://administrator.de/contentid/617188
Ausgedruckt am: 19.11.2024 um 05:11 Uhr
19 Kommentare
Neuester Kommentar
Zitat von @AN34Mem:
Wie ist es aber (überhaupt) möglich die cmd zu starten, das dazugehörige Dos Fenster öffnet sich und bleibt bestehen,
sowie erst dann wenn die markierten Dateien (per Drag und Drop - WICHTIG!) auf das Dos Fenster gezogen werden
erfolgt die Bearbeitung?
Wie ist es aber (überhaupt) möglich die cmd zu starten, das dazugehörige Dos Fenster öffnet sich und bleibt bestehen,
sowie erst dann wenn die markierten Dateien (per Drag und Drop - WICHTIG!) auf das Dos Fenster gezogen werden
erfolgt die Bearbeitung?
Hi,
so ganz verstehe ich deine Frage nicht.
Du willst die CMD öffnen, per D&D dein cmd-File hinein ziehen und dann soll die Verarbeitung starten und das CMD nachher offen bleiben.
Das macht sie normalerweise eh.
Anders verhält es sich wenn du eine CMD-Datei hast und diese per Doppelclick startest.
Nach der Verarbeitung schließt sich die CMD wieder.
Passt du am Ende deiner Datei ein "Pause" ein, bleibt das CMD offen.
Grüße!
Zitat von @AN34Mem:
Sobald die "meine.cmd" per Doppelklick aufgerufen wird, bleibt das Fenster zwar offen (wegen "pause"),
jedoch wenn man Dateien per drag & drop auf das "DOS Fenster" schiebt (nicht auf die cmd Datei), wird dieses
sofort geschlossen, und es findet auch keinerlei Bearbeitung statt.
Sobald die "meine.cmd" per Doppelklick aufgerufen wird, bleibt das Fenster zwar offen (wegen "pause"),
jedoch wenn man Dateien per drag & drop auf das "DOS Fenster" schiebt (nicht auf die cmd Datei), wird dieses
sofort geschlossen, und es findet auch keinerlei Bearbeitung statt.
Jetzt willst du aber was anderes als oben beschrieben.
Mach folgendes:
Weg A)
Erstelle eine Verknüpfung auf deine datei.cmd.
In den Eigenschaften der Verknüpfung wähle den Reiter "Verknüpfung"
im Ziel ergänze am Anfang der Zeile wie folgt:
cmd.exe /k <Das was schon drinnen steht>
Mit Doppelklick auf die Verknüpfung starten
WegB)
Erstelle eine weitere cmd-Datei (bsp: MeinStarter.cmd) im gleiche Pfad wie deine CMD-Datei. Schreibe folgendes rein:
cmd.exe /k "%~dp0meine.cmd"
mit DoppelClick auf MeinStarter.cmd wird deine CMD verarbeitet und das Fenster bleibt offen. Dito, wenn du es auf ein CMD-Window ziehst.
mit etwas Google hättest du das sicher gefunden:
https://www.google.com/search?ei=LM2aX6LrIPnggwfPkrLQCg&q=cmd-file+k ...
Geht nicht. Der Console Host als Bereitsteller des Fensters müsste dann die auf das Fenster gezogene Datei an den cmd.exe Prozess weitergeben, der dann wiederum wissen müsste, wo im gerade abzuarbeitenden Script auf diese Art der Eingabe gewartet werden soll und wo sie verarbeitet werden soll. Das ist nicht vorgesehen. %* und %0 - %9 sind Parametervariablen. Diese bekommen ihre Werte von den an die cmd.exe übergebenen Kommandozeilenargumenten. Die Explorer Shell unterstützt diese Art der Übergabe durch Drag/Drop auf die Scriptdatei. Aber eine Eingabe auf das geöffnete Konsolefenster ist in dieser Form nicht unterstützt.
Das einzige was unterstützt wird, ist, dass ein Drag/Drop auf ein CMD Shellfenster den Dateipfad hinter den Prompt setzt. Das führt dann bei Drücken von Enter zum Ausführen dieser Datei. Mehr ist nicht ...
Steffen
Das einzige was unterstützt wird, ist, dass ein Drag/Drop auf ein CMD Shellfenster den Dateipfad hinter den Prompt setzt. Das führt dann bei Drücken von Enter zum Ausführen dieser Datei. Mehr ist nicht ...
Steffen
Moin,
Mit Powershell hingegen wäre es möglich, eine kleine GUI zu basteln, die Dateien per Drag&Drop annimmt und dann damit die gewünschten Aktionen durchführt. Um hier abhilfe schaffen zu können, wären allerdings mehr Infos notwendig, welche Aufgaben das Skript erledigen soll.
Gruß Thomas
Zitat von @rubberman:
Die Explorer Shell unterstützt diese Art der Übergabe durch Drag/Drop auf die Scriptdatei. Aber eine Eingabe auf das geöffnete Konsolefenster ist in dieser Form nicht unterstützt.
Das einzige was unterstützt wird, ist, dass ein Drag/Drop auf ein CMD Shellfenster den Dateipfad hinter den Prompt setzt. Das führt dann bei Drücken von Enter zum Ausführen dieser Datei. Mehr ist nicht ...
... , zumindest nicht mit Batch.Die Explorer Shell unterstützt diese Art der Übergabe durch Drag/Drop auf die Scriptdatei. Aber eine Eingabe auf das geöffnete Konsolefenster ist in dieser Form nicht unterstützt.
Das einzige was unterstützt wird, ist, dass ein Drag/Drop auf ein CMD Shellfenster den Dateipfad hinter den Prompt setzt. Das führt dann bei Drücken von Enter zum Ausführen dieser Datei. Mehr ist nicht ...
Mit Powershell hingegen wäre es möglich, eine kleine GUI zu basteln, die Dateien per Drag&Drop annimmt und dann damit die gewünschten Aktionen durchführt. Um hier abhilfe schaffen zu können, wären allerdings mehr Infos notwendig, welche Aufgaben das Skript erledigen soll.
Gruß Thomas
Mal ein kleines Beispiel wie so etwas aussehen könnte als Schnellschuss...
Es gibt natürlich viele Wege nach Rom. Ich habe hier mal eine Textbox erstellt, in der die Dateien, die per Drag&Drop eingefügt werden, aufgelistest werden.
Als etwas schönere Alternative gäbe es auch ein Gridview (quasi wie eine Excel-Tabelle aufgebaut), bei dem die Dateien in einzelnen Zeilen aufgelistet werden. Da für dieses allerdings eine wesentlich umfangreichere konfiguration nötig ist, dachte ich für den Anfang reicht es so erst mal...
Die Dateien sind anschließend über die Variable $Files erreichbar.
Add-Type -AssemblyName System.Windows.Forms
$Files = @()
# Fenster erstellen
$Form = New-Object System.Windows.Forms.Form -p @{
AllowDrop = $true
StartPosition = 'CenterScreen'
TopMost = $true
Padding = '20,20,20,20'
Size = '700,500'
Text = 'Fenstertitel'
}
# Kopieren Symbol anzeigen, wenn Dateien auf das Fenster gezogen werden
$Form.Add_DragOver({$_.Effect = 'Copy'})
# Dateien zur Liste hinzufügen
$Form.Add_DragDrop({
$Global:Files += $_.Data.GetFileDropList()
$RTFBox.Text = $Files -Join "`n"
if ($Files) {$Button.Enabled = $true}
})
# Textbox erstellen
$RTFBox = New-Object System.Windows.Forms.RichTextBox -p @{
ReadOnly = $True
Dock = 'Top'
Size = '0,380'
Text = "### Dateien per Drag & Drop einfügen ###"
}
# Startbutton erstellen
$Button = New-Object System.Windows.Forms.Button -p @{
Location = '300,420'
Text = 'Start'
Anchor = 'Bottom'
Enabled = $false
}
# Aktionen, die beim klicken des Start-Buttons ausgeführt werden
$Button.Add_Click({
$Form.Hide() # Fenster verstecken
# Hier kommt der Code rein, was getan werden soll
})
# Textbox & Button zum Fenster hinzzufügen
$Form.Controls.AddRange(@($RTFBox,$Button))
# Fenster anzeigen lassen
[void]$Form.ShowDialog()
Es gibt natürlich viele Wege nach Rom. Ich habe hier mal eine Textbox erstellt, in der die Dateien, die per Drag&Drop eingefügt werden, aufgelistest werden.
Als etwas schönere Alternative gäbe es auch ein Gridview (quasi wie eine Excel-Tabelle aufgebaut), bei dem die Dateien in einzelnen Zeilen aufgelistet werden. Da für dieses allerdings eine wesentlich umfangreichere konfiguration nötig ist, dachte ich für den Anfang reicht es so erst mal...
Die Dateien sind anschließend über die Variable $Files erreichbar.
Zitat von @AN34Mem:
Ja. Meine Frage hat sich auf cmd / bat bezogen.
Es wäre toll gewesen, wenn es zu einer Lösung diesbezüglich gekommen wäre.
Aber wie "rubberman" schreibt, ist das aus seinen genannten Gründen leider nicht möglich.
Ja. Meine Frage hat sich auf cmd / bat bezogen.
Es wäre toll gewesen, wenn es zu einer Lösung diesbezüglich gekommen wäre.
Aber wie "rubberman" schreibt, ist das aus seinen genannten Gründen leider nicht möglich.
Also ich setze das genauso wie ich es oben beschrieben habe seit Jahren hin und wieder ein, wenn es notwendig ist. Vor allem dann, wenn es darum geht komplexe "Wünsche" für Benutzer auf dem Desktop bereitzustellen. Da bekommt das CMD noch ein nettes Icon und einen sprechenden Namen, Fertig! Der User macht einen DoppelKlick oder zieht das CMD-File auf eine seiner EXEn und das Ding läuft.
Vielleicht habe ich da ja einen Denkfehler, aber aktuell kann ich nicht nachvollziehen wo da die beschriebene Einschränkung sein soll.
Grüße!
Lese es dir nochmal in Ruhe durch und setze es genau so um.
Mein Verständnis: Ein Batchscript soll eine Aufgabe an irgendwelchen Dateien erledigen (z.B. umbenennen). Dazu sollen die Dateien die umbenannt werden sollen auf das geöffnete Scriptfenster gezogen werden.
Das geht aber nicht. Du kannst nicht beliebige Dateien auf ein Fenster ziehen und in einem Script verarbeiten. Du kannst nur eine Datei in den CMD Prompt ziehen und diese anschließend ausführen. Vielleicht habe ich aber auch irgendwas falsch verstanden ...
Steffen
Das geht aber nicht. Du kannst nicht beliebige Dateien auf ein Fenster ziehen und in einem Script verarbeiten. Du kannst nur eine Datei in den CMD Prompt ziehen und diese anschließend ausführen. Vielleicht habe ich aber auch irgendwas falsch verstanden ...
Steffen