File- und Skripting-Tricks mit dem ACMP AutoMATE

Alle Fragen, Tipps und Tricks rund um ACMP AutoMATE
Antworten
theogott
Beiträge: 15
Registriert: So Feb 27, 2011 3:29 pm

Hier folgen ein paar kleine Codeschnipsel, die dem Einsteiger zeigen sollen wie man im Umgang mit Dateien zum Ziel kommt. Es geht um Pfade und Dateinamen.
Egal ob ein Setup einen Link auf dem Desktop hinterläßt den man mal schnell löschen will, oder ob man nach dem automatisierten Setup noch Dateien in den Zielordner kopieren will.

Das geht alles mit einem Skript und dem jeweil richtigen Befehl. Den Befehl, den man aus der großen Anzahl an Möglichkeiten, die der ACMP AutoMATE bietet auch erstmal herausfinden muss.

Einfache Installationen mit dem "InstaRec" Rekorder aufzeichnen - das kann an siche jeder, der auch ein Setup bedienen kann. Aber der Profi muß mehr können. Das ist auch der Grund warum ich empfehle eine Schulung zum AutoMATE zu machen. Nur so kann man schnell alle Möglichkeiten ausschöpfen.

Wie ist das zum Beispiel mit Pfaden. Wer von einem beliebigen Pfad aus nur mal eine Ebene höher will, wie geht das?

Code: Alles auswählen

' Irgendein Pfad, hier der wo das Script selbst liegt
VAR\PAT=?pfad

' Eine Ebene höher wechseln
' BLB = "Before Last Backslash"
BLB\$$PAT
VAR\$$PSA=$v1$

' CTC = Copy To Clipboard
CTC\$v1$
Im Clipboard befindet sich nun der Pfad, eine Verzeichniseben höher, als da wo das Script gerade liegt. Will man das Script als EXE laufen lassen benötigt man statt "?pfad" wie immer "$ev4$":

Code: Alles auswählen

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

BLB\$$PAT
VAR\$$PSA=$v1$
CTC\$v1$
Manchmal benötigt man einen Dateinamen mit einer anderen Endung.

Code: Alles auswählen

' Wieder nehmen wir eine konrete 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
Will man im Zuge eines Prozesses warten, bis ein bestimmtes File erscheint, genügt dazu ein Befehl WFF\ (Wait For File).
In Batchfiles sehr nützlich, weil man so alles perfekt absichern kann, gegen Latenzen im Dateisystem.

Code: Alles auswählen

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

Code: Alles auswählen

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

Code: Alles auswählen

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

Code: Alles auswählen

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.

Das kann man ganz leicht umgehen, mit VVS\ und VVR\.

Dazu macht man das aufrufende Script so, wie immer:

Code: Alles auswählen

' 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 Unterscript würde zum Beispiel so aussehen:

Code: Alles auswählen

' 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.
@

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
Theo Gottwald
Selbständiger IT-Berater

ACMP AutoMATE Professional
Let the Robots do it for you.
Antworten