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
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$
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
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
Code: Select all
' Datei löschen
DEL\$$FIN
' Und sicherheitshalber warten bis die Datei wirklich aus allen Puffern weg ist
WFF\$$FIN|!
Code: Select all
VAR\$$PAT=c:\myfolder\
CHD\$$PAT
' Kleine Pause von 150 ms
TDL\150
Sei es was es will:
Code: Select all
VAR\$$COM=c:\bin\mytool.exe
VAR\$$FIC=My parameters /v /x
EXE\$$COM|"$$FIC"
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
@
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