MS-DOS Batch-Funktion

Aktuelle Version: 12.6 (09.06.2017)
Alles zum Thema Directory Opus
Antworten
wazlaf
Beiträge: 52
Registriert: 18. Mär 2014 11:06
Betriebssystem: Win 8.1 Pro x64
Produkt: DOpus 11.1 x64
Version DOpus: Pro

MS-DOS Batch-Funktion

Beitrag von wazlaf » 7. Jul 2014 13:41

Hallo zusammen,

ich bin gerade dabei etwas mit den Buttons zuspielen und bin dabei auf die Möglichkeit Batch Dateien zu erstellen gestossen. Leider habe ich damit etwas Probleme.

Anbei eine einfache Batch die per Button ausgeführt werden soll. Mittels "set c" sollen alle Umgebungsvariablen angezeigt werden die mit dem Buchstanben c beginnen. Der Button/Batch führt allerdings nur den ersten "echo 1" Befehl aus, danach wird abgebrochen.

In der Hilfe bin ich auf @runbatch/@norunbatch gestossen was aber leider auch nicht funktioniert.

Was mache ich falsch?
Vielen Dank für die Hilfe

Funktion: MS-DOS Batch-Funktion

Code: Alles auswählen

@leavedoswindowopen
@echo on

echo 1

@runbatch
Set c
@norunbatch

echo 2
Freundliche Grüße
wazlaf

botharg
Beiträge: 4
Registriert: 7. Apr 2013 00:11
Betriebssystem: Win7 Home Premium 64 bit
Produkt: 11.5
Version DOpus: Pro

Re: MS-DOS Batch-Funktion

Beitrag von botharg » 11. Aug 2014 18:13

Hallo!

versuch es mal damit:

Code: Alles auswählen

<?xml version="1.0"?>
<button backcol="none" display="icon" textcol="none">
	<label>environvars</label>
	<tip>bestimmte Umgebungsvariablen anzeigen</tip>
	<user_label>environvars</user_label>
	<icon1>#console</icon1>
	<function type="batch">
		<instruction>@echo off</instruction>
		<instruction>start "" /i cmd /c "echo.&set c&echo.&pause"</instruction>
	</function>
</button>
[/size]

Code kopieren, Rechtsklick auf eine Symbolleiste - Anpassen - Rechtsklick auf die gewünschte Position/Symbolleiste, welche den Btton erhalten soll - Einfügen - Anpassen-Dialog mit "Ok" schliessen.

Das Ding startet eine eigene CMD-Instanz, welche die übergebenen Befehle abarbeitet

Code: Alles auswählen

start "" /i cmd /c "echo.&set c&echo.&pause"
[/size]

Für genauere Info starte eine CMD und rufe dort "start /?" und "cmd /?" auf

Gruß
Botharg

**Edit
als Spielerei, versuche es mal mit folgendem:

Code: Alles auswählen

<?xml version="1.0"?>
<button backcol="none" display="icon" textcol="none">
	<label>environvars</label>
	<tip>bestimmte Umgebungsvariablen anzeigen</tip>
	<user_label>environvars</user_label>
	<icon1>#console</icon1>
	<function type="batch">
		<instruction>@echo off</instruction>
		<instruction>start "" /i cmd /c "echo.&set c|find /i "\"|clip"</instruction>
	</function>
</button>
[/size]

Zum reinen probieren auf der Commandline:

Code: Alles auswählen

echo.&set c|find /i "\"|clip
[/size]

Beide Codes haben keine richtige "Ausgabe", sie geben nur die Umgebungsvariablen aus, welche mit "c" anfangen, dann wird mit "find" rausgefiltert, was kein "\" hat (also keine Pfadangaben enthält) und das Ergebnis wird statt es anzuzeigen in die Zwischenablage kopiert... :wink:

wazlaf
Beiträge: 52
Registriert: 18. Mär 2014 11:06
Betriebssystem: Win 8.1 Pro x64
Produkt: DOpus 11.1 x64
Version DOpus: Pro

Re: MS-DOS Batch-Funktion

Beitrag von wazlaf » 14. Aug 2014 09:41

Hallo Botharg,

vielen Dank für Deine Antwort mit den aufgeführten Lösungsmöglichkeiten.
Das dargestellte Problem mit "set c" sollte eigentlich nur darstellen das (meiner Meinung nach) die MS-Dos Batch-Funtion von DOpus nicht wie erwartet arbeitet.

Selbstverständlich kann ich innerhalb eines DOpus Schalters eine zweite cmd Instanz "cmd /c" erzeugen und mit dieser dann die gewünschten Batch Befehle ausführen (oder gleich auf eine externes CMD-File verweisen), aber eigentlich habe ich erwartet das ein Schalter mit der Funktionalität MS-Dos Batch-Funtion dies ohne "Flickschusterei" automatisch erledigt.

Laut Hilfe

Code: Alles auswählen

to look at the batch file created by the above function, you would see something similar to the following:

@echo off
chcp 1252 > nul
C:
cd "\Users\Jon\Documents"
dir /w > "C:\Test\Documents.txt"

These instructions are written automatically to the .bat file, based on the parameters and definition of the function.

@echo off is a standard MS-DOS instruction that prevents each command from being echoed to the prompt window as the batch file is run

chcp 1252 > nul initialises the code page of the command prompt (1252 is the standard Windows code page). 

C: sets the current drive of the command prompt - this is generated automatically from the cd {sourcepath} instruction in the command definition. 

cd "\Users\Jon\Documents" sets the current directory on the current drive - again, this is generated automatically from the cd {sourcepath} instruction. 

dir /w > "C:\Test\Documents.txt" is responsible for producing the actual directory listing. In this instance, the source folder was called Documents, and the destination folder was C:\Test - so the name of the output file generated by {destpath}{sourcepath|nopath|noterm}.txt was C:\Test\Documents.txt. 
sollte ja eingentlich im Hintergrund eine CMD erzeugt werden und diese dann ausgeführt werden. Nur leider nicht mit allen Befehlen wie z. B. "Set C"

Nochmals Dank für Deine Antwort.

Freundliche Grüße
wazlaf

Benutzeravatar
Kundal
Moderator
Beiträge: 1337
Registriert: 20. Apr 2010 21:26
Betriebssystem: Win7 & Win 10 Pro 64 bit
Produkt: DOpus 12 x64 - Letzte Betaversion
Version DOpus: Pro

Re: MS-DOS Batch-Funktion

Beitrag von Kundal » 14. Aug 2014 10:42

Das Problem mit dem Befehl Set ist, dass das auch ein DOpus-interner Befehl ist und deshalb nicht als DOS-Befehl interpretiert wird. Um das zu umgehen musst du @externalonly verwenden:

Code: Alles auswählen

@leavedoswindowopen
@externalonly
@echo on

echo 1

@runbatch
Set c
@norunbatch

echo 2

wazlaf
Beiträge: 52
Registriert: 18. Mär 2014 11:06
Betriebssystem: Win 8.1 Pro x64
Produkt: DOpus 11.1 x64
Version DOpus: Pro

Re: MS-DOS Batch-Funktion

Beitrag von wazlaf » 14. Aug 2014 11:44

Hallo Kundal,

super, vielen Dank für den Hinweis. Jetz klappt es wie gewünscht.

Freundliche Grüße
wazlaf

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste