an34mem
Goto Top

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.

Content-ID: 617188

Url: https://administrator.de/contentid/617188

Ausgedruckt am: 19.11.2024 um 05:11 Uhr

mayho33
mayho33 29.10.2020 um 09:53:39 Uhr
Goto Top
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?


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!
AN34Mem
AN34Mem 29.10.2020 um 12:09:00 Uhr
Goto Top
Sorry, falls meine Frage zu einem Missverständnis geführt hat.

Die Datei z.B.."meine.cmd" funktioniert wenn ich Dateien per Maus auf diese Datei ziehe. Somit kann die Bearbeitung erfolgen.
"Meine.cmd" öffnet dafür ein "DOS Fenster", und es bleibt solange geöffnet bis alle Dateien darin bearbeitet sind.

Ich möchte jedoch:
Ein Doppelklick auf die Datei "meine.cmd" durchführen, dass das dazugehörige Dos Fenster sich öffnet und geöffnet bleibt.
(Eine Bearbeitung kann bis dato ja nicht erfolgen, da keine Daten in das - DOS Fenster - gezogen wurden.)

Anschließend wähle ich meine zu ändernde Dateien aus, und ziehe diese anschließend per Drag & Drop in das "DOS Fenster", und nicht wie eigentlich sonst auf die "meine.cmd" Datei.

Die Dateien werden bearbeitet, und nach Fertigstellung soll auch das DOS Fenster weiterhin geöffnet bleiben (zwecks weitere Dateien Bearbeitung).

Ich hoffe das es verständlich ist.
mayho33
mayho33 29.10.2020 um 13:12:11 Uhr
Goto Top
Wie oben schon geschrieben:

Am Ende in deiner Datei einfach ein "pause" hinschreiben.

Exemplarisch:
Befehl...
Befehl...
Befehl...
Pause
AN34Mem
AN34Mem 29.10.2020 um 13:37:35 Uhr
Goto Top
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.

Der Befehl "pause" ist mir bekannt.
mayho33
mayho33 29.10.2020 aktualisiert um 15:10:34 Uhr
Goto Top
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.

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 ...
AN34Mem
AN34Mem 29.10.2020, aktualisiert am 21.04.2022 um 16:03:43 Uhr
Goto Top
Danke vorab für deine Hilfe.

Ich habe dein Vorschlag wahrscheinlich nicht richtig umgesetzt. Zwar bleiben die beiden "Dos Fenster" immer geöffnet (pause),
aber wenn ich zum Beispiel die Test.txt in das "DOS Fenster" ziehe, kommt es zu keiner Bearbeitung (Umbenennung).

Ziehe ich die test.txt auf die Datei "meine.cmd", wird diese einwandfrei umbenannt.

screen
rubberman
Lösung rubberman 29.10.2020 um 19:04:02 Uhr
Goto Top
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
TK1987
Lösung TK1987 29.10.2020 um 20:51:52 Uhr
Goto Top
Moin,

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.

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
AN34Mem
AN34Mem 29.10.2020 um 20:55:25 Uhr
Goto Top
Danke Steffen für diese ausführliche und nachvollziehbare Erklärung.

Auch nochmals ein "DANKE" an "mayho33" für die aufgebrachte Geduld,
und geopferte Zeit eine Lösung für das Problem zu finden.

Viele Grüße
rubberman
rubberman 29.10.2020 um 20:55:46 Uhr
Goto Top
Japp. face-smile
AN34Mem
AN34Mem 29.10.2020 aktualisiert um 21:27:28 Uhr
Goto Top
Ein kleines "GUI Beispiel" wie so etwas aussehen könnte wäre sehr interessant.

Es müsste auch nicht viel können, vielleicht mit einer Art Auswahlmenü z.B. um Dateien umbenennen,
oder Dateien in ein anderes VZ kopieren zu lassen. Nichts großes.

Damit hätte man ein Gerüst, und könnte sich die Sache anschauen und weiter ausbauen.
Momentan habe ich leider keinerlei Ahnung wie sowas aussehen könnte.

Vielleicht hat jemand schon ein Beispiel Skript, und könnte es zur Verfügung stellen.

Danke Thomas für deinen Hinweis.
rubberman
rubberman 29.10.2020 um 21:49:39 Uhr
Goto Top
TK1987
TK1987 29.10.2020 aktualisiert um 22:14:24 Uhr
Goto Top
Mal ein kleines Beispiel wie so etwas aussehen könnte als Schnellschuss...
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.
mayho33
mayho33 30.10.2020 aktualisiert um 00:53:51 Uhr
Goto Top
Mit einer TXT geht das auch nicht.

Eine cmd oder bat-Dstei muss das sein.

Und warum plötzlich Powershell? Die Rede war von CMD, also comspec.
AN34Mem
AN34Mem 30.10.2020 um 05:57:50 Uhr
Goto Top

Danke Steffen für die Verlinkung.
AN34Mem
AN34Mem 30.10.2020 aktualisiert um 06:18:16 Uhr
Goto Top
Zitat von @mayho33:

Und warum plötzlich Powershell? Die Rede war von CMD, also comspec.

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.

Eine Alternative mit einer Powershell Gui aufzuzeigen finde ich sehr interessant, insbesondere
wenn man Laie auf diesem Gebiet ist.

Deine oben genannten Weg A) und B) fand ich auch einen guten Ansatz.
Ich muss gestehen, dass ich an die Einträgen unter "Eigenschaften der Verknüpfung" nicht gedacht habe.

Aber wie sich gezeigt hat, ist das Problem doch größer als ich erst gedacht habe.
AN34Mem
AN34Mem 30.10.2020 aktualisiert um 06:39:46 Uhr
Goto Top
Zitat von @TK1987:

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.

Danke für dein Beispiel: "TK1987".

Unter der Verlinkung von "Steffen" findet man das
Beispiel Skript: "A drag-and-drop GUI made with PowerShell".

Im Grunde eine Stufe weiter...
Empfehlenswert sich einmal anzuschauen.
mayho33
mayho33 02.11.2020 um 12:07:34 Uhr
Goto Top
Zitat von @AN34Mem:

Zitat von @mayho33:

Und warum plötzlich Powershell? Die Rede war von CMD, also comspec.

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.
rubberman
rubberman 02.11.2020 um 12:49:08 Uhr
Goto Top
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