MPR Tricks mit Pfaden, Ordnern und dem Dateisystem

Moderator: MVogt

Post Reply
User avatar
Theo_Gottwald
Posts: 367
Joined: 03. Oct 2009, 08:57
Location: Herrenstr.11 * 76706 Dettenheim
Contact:

MPR Tricks mit Pfaden, Ordnern und dem Dateisystem

Post by Theo_Gottwald » 14. Dec 2018, 15:05

Das sind jetzt ein paar kleine Codeschnipsel, die man braucht wenn man mit Pfaden zu tun hat.
Es geht um Pfade und Dateinamen.

1. Wer von einem beliebigen Pfad aus nur mal eine Ebene höher will, kommt so zum Ziel:

Code: Select all

' Irgendein Pfad, hier der wo das Script selbst liegt
VAR\$$PSA=?pfad
' Die Ausgangsavariable enthält nun
' c:\program files (x86)\matrix42\package robot\remfiles\projects

' Eine Ebene höher wechseln
BLB\$$PSA
VAR\$$PSB=$v1$

' Copy To Clipboard
CTC\$$PSB

' Text im Clipboard ist nun
' c:\program files (x86)\matrix42\package robot\remfiles
Im Clipboard befindet sich nun der Pfad, eine Verzeichnisebene höher, als da wo das Script gerade liegt.

2. Pfad der EXE im EXE-Modus oder ?pfad des Skriptes im Editor?
Will man das Script als EXE laufen lassen benötigt man statt "?pfad" wie immer "$ev4$".
Das könnte man automatisch unterscheiden lassen mittel IEX\(I EXE Mode) also so:

Code: Select all

' Wenn das Script als EXE läuft
IEX\
  VAR\$$PAT=$ev4$
ELSE
  ' Wenn das Script im Editor läuft
  VAR\PAT=?pfad
EEX\

BLB\$$PAT
VAR\$$PSA=$v1$
CTC\$v1$
Das muß man aber nicht denn $ev4$ produziert im Editor-Modus (also NICHT als EXE) genau das gleiche Ergebnis wie "?pfad".
Wenn man also $ev4$ statt ?pfad verwendet hat man so oder so immer das richtige Ergebnis.


3. Manchmal benötigt man einen Dateinamen den man schon hat, aber mit einer anderen Endung.

Code: Select all

' Wieder nehmen wir eine konkrete Datei (mit oder ohne Pfad)
VAR\$$FIC=f:\files\tiefer\Meinfile.pas
' Nun ermitteln wir alles vor dem letzten "."
BLC\$$FIC|.
VAR\$$FIX=$v1$

' Und damit können wir nun die anderen Files gleichen Namens, anderer Endung ermitteln
' f:\files\tiefer\Meinfile.log
VAR\$$FIN=$$FIX.log
' f:\files\tiefer\Meinfile.inc
VAR\$$FIS=$$FIX.inc
MBX\$$FIS
4. Will man im Zuge eines Prozesses warten, bis ein bestimmtes File erscheint, genügt dazu ein Befehl WFF\ (Wait For File).
Nehmen wir mal eine Compilierung, da wird eine Datei erstellt. Erst wenn die da ist soll ein anderer Prozess die Datei weiterverwenden, zum Beispiel Komprimieren oder ein Zertifikat anhängen.

Mit dem MPR schreibt man einfach "WFF\" (Wait for File)

Code: Select all

WFF\$$FIN
Und wenn man warten will, bis es sicher gelöscht wurde bzw. nicht mehr da ist, schreibt man eben:

Code: Select all

' Datei löschen
DEL\$$FIN
' Und sicherheitshalber warten bis die Datei wirklich aus allen Puffern weg ist
WFF\$$FIN|!
5. Im Zuge von solchen Batch-Scripten muss man hier und da auch das aktuelle Verzeichnis wechseln, das geht so:

Code: Select all

VAR\$$PAT=c:\myfolder\
CHD\$$PAT
' Kleine Pause von 150 ms 
TDL\150
6. Und letztlich will man ein Commandline-Tool aufrufen, das einen Parameter bekommt.
Sei es was es will:

Code: Select all

VAR\$$COM=c:\bin\mytool.exe
VAR\$$FIC=My parameters /v /x
EXE\$$COM|"$$FIC"
7. Lokale Variablen
Wenn man nun eine Sammlung solche Batch-Scripte hat, und eines ruft ein anderes auf (mit JNF\)
besteht zumindest die Gefahr dass mal eine Variable eines aufgerufenen Unterscriptes eine Variable des aufrufenden Scriptes überschreibt.
Um das zu vermeiden kann man Skript-lokale Variablen verwenden. Das geht mit VVS\ und VVR\.

Dazu macht man das aufrufende Script so, wie immer:

Code: Select all

' Das Script: "MySubScript.rem" im gleichen Ordner wird aufgerufen, es werden zwei Parameter an das Script übergeben.

VAR\$$TXT=Hallo Franz
JNF\MySubScript.rem|Parameter1|Parameter2
' Es wird "Hallo Franz" ausgegeben.
MBX\$$TXT
@
Das aufgerufene Unterskript würde zum Beispiel so aussehen:

Code: Select all

' MySubScript.rem
VVS\
VAR\$$TXT=Hallo Peter
' Die Variablen sind alle gesichert, die Parameter sind jedoch alle da.
VAR\$$NAM=$$_01
VAR\$$NAN=$$_02

MBX\ Der erste Parameter ist: $$NAM
MBX\ Der zweite Parameter ist: $$NAN
' Es wird "Hallo Peter" ausgegeben.
MBX\$$TXT
VVR\
' Das @ beschliesst ein Unterprogramm das mit "JNF\" auferufen wird.
@

8. Dateipfade zerlegen mit dem MPR.
Grundsätzlich kann man einen Pfad ganz einfach zerlegen mit GFT\ (get File Tokens).
Ein Befehl denn man in dem Zusammenhang kennen sollte.
Mit "GFT\" können Sie einen im Datenteil angegebenen kompletten Dateipfad in die Bestandteile
- Verzeichnis (ohne Backslash am Ende),
- Dateiname (ohne Endung) und
- Endung (sofern es eine gibt)
zerlegen. Die Token werden in Kleinbuchstaben in programminternen Variablen hinterlegt:
$v2$ enthält das Verzeichnis ohne abschließenden Backslash,
$v3$ enthält den reinen Dateinamen ohne Endung,
$v4$ enthält die Endung,
$v5$ enthält das Root-Verzeichnis mit abschließendem Backslash und
$v6$ enthält den reinen Verzeichnisnamen ohne abschließenden Backslash.
Wenn es sich um einen Netzwerkpfad handelt, wird statt des Verzeichnisnamen in
$v6$ der Servername mit abschließendem Backslash geliefert.

Wenn im Datenteil der Name eines (existierenden) Verzeichnisses übergeben wird, bleiben $v3$ und $v4$ leer.
Wenn Sie den Datenteil leer lassen, wird der Inhalt von "$v1$" als Dateipfad benutzt, wie er z.B. von "IEF\" (If Exists File/Folder) belegt wurde.

Beispiel:
DVV\1+
GFT\?remexe
@
Output:
$v2$=e:\wr6-code
$v3$=remote
$v4$=exe
$v5$=e:\
$v6$=wr6-code

Post Reply

Return to “Package Robot”

Who is online

Users browsing this forum: No registered users and 4 guests