0

パスとバージョン番号を含むすべてのファイルを物理デバイスの TMP ファイルに書き込むバッチ スクリプトがあります。次に、このバッチ スクリプトは、指定された変数よりも大きいファイル バージョン番号を示すすべての行を書き込みます。

DIRECTORYX := DIRECTORY /NODATE /NOHEADING /NOTRAILING
DIR_OUTPUT_FILENAME = "TOPAS$UTILLOG:" + F$UNIQUE() + ".TMP"
DEVICE = $1$DGA1112
DIRECTORYX 'DEVICE':[000000...]*.*;* /NOSIZE /OUTPUT='DIR_OUTPUT_FILENAME'

同時に、報告されたくないファイルがあります。この場合、このファイル名 ( filename.ext; ) を含む可能性のある行を TMP ファイルから削除して、バッチ スクリプトがそれを続行し、明示的に無視したくないファイルのみを報告できるようにします。

テキスト文字列の変数として「IGNORE_FILE」を使用してループ内でファイルを読み取って、関連するテキスト行を一致させて削除し、バッチスクリプトがファイルを処理するときに要求されたファイルを報告しないようにするにはどうすればよいですか無視されます。

助けてくれてありがとう

4

2 に答える 2

1

どちらのコメントも素晴らしいスタートです。それらを注意深く確認してください。OpenVMS のどのバージョンですか? 過去20年間の何か?

DFU をつかんで使用するだけです。

$ define/user sys$output nl:
$ mcr dfu searc/versio=min=200/excl=(*.dat,*.tmp)/form="!AS"/out=tmp.tmp dka0:
$ type tmp.tmp
BUNDY$DKA0:[SYS0.SYSMGR]OPERATOR.LOG;242
BUNDY$DKA0:[SYS0.SYSMGR]ACME$SERVER.LOG;241
BUNDY$DKA0:[SYS0.SYSMGR]LAN$ACP.LOG;241

F$SEARCH をループに入れ、バージョンやその他の興味深いコンポーネントを解析して除外を実装することも検討できます....

$
$ type SEARCH_HIGH_VERSION.COM
$ max = 200
$ old = ""
$ IF p1.EQS."" THEN EXIT 16 ! PARAM
$loop:
$ file = F$SEARC(p1)
$ IF file.EQS."" THEN EXIT 99018 ! NMF
$ IF file.EQS.old THEN EXIT 100164 ! Not wild
$ old = file
$ version = F$PARSE(file,,,"VERSION") - ";"
$ IF max.GE.'version' THEN GOTO loop
$ ! IF ... further string tests
$ WRITE SYS$OUTPUT file
$ GOTO LOOP
$
$ @SEARCH_HIGH_VERSION.COM *.*;*
SYS$SYSROOT:[SYSMGR]ACME$SERVER.LOG;241
SYS$SYSROOT:[SYSMGR]LAN$ACP.LOG;241
SYS$SYSROOT:[SYSMGR]OPERATOR.LOG;242
SYS$SYSROOT:[SYSMGR]TMP.TMP;304
SYS$SYSROOT:[SYSMGR]TMP.TMP;303
SYS$SYSROOT:[SYSMGR]TMP.TMP;302
SYS$SYSROOT:[SYSMGR]TMP.TMP;301
SYS$SYSROOT:[SYSMGR]TMP.TMP;300
%RMS-E-NMF, no more files found
$
$ @SEARCH_HIGH_VERSION.COM tmp.tmp
SYS$SYSROOT:[SYSMGR]TMP.TMP;304
%RMS-F-WLD, invalid wildcard operation
$

DFU はおそらく DIR よりも 10 倍高速になります DIR は F$SEARCH よりも 10 倍高速になりますが、処理中にそれが失われます。

幸運を!ハイン

于 2014-03-13T04:54:23.990 に答える