命令行上的FME
FME可以从Windows中的命令行运行:打开命令提示符窗口并键入FME会提供下面显示的完整选项列表。
命令FME<workspacename>.fmw将运行特定的工作空间。因此,如果可以从命令行调用FME工作空间,则可以从DOS批处理(.bat)文件调用一系列工作空间(或具有不同数据集的同一工作空间)。
1、用法
fme<controlFile>[<keyword><value>]*[--<macroName><value>]*
fme<scriptfile>[<scriptArgument>*]
fme<licenseFile>.fmelic
fme<command><arguments>
其中:
<controlFile>是<mappingFile>.fme或<workspace>.fmw中的一个
<scriptFile>是<tclScript>.tcl或<pythonScript>.py中的一个
<command>是以下命令中的一个:
命令名称参数
-----------------------------------------------------
GENERATE<sourceType><destType><sourceDataset><controlFile>[<keyword><value>]*
PARAMETER_FILE<parameterFile>
COMMAND_FILE<commandFile>
REGISTER_SOCKET<hostName><service>[serverConfigFile][-<ServerParmName><ServerParmValue>]*
CREATE_SOCKET<service>[serverConfigFile][-<ServerParmName><ServerParmValue>]*
GENTRANS[<keyword><value>]*<parameterFile>
GENTRANS[<keyword><value>]*<sourceType><sourceDataset><destType><destDataset>
LIST_TRANSFORMERS[VERBOSE]
LIST_UNLICENSED_TRANSFORMERS
LIST_FACTORIES
LIST_FUNCTIONS
PROTECT<sourceFile><destFile>
如何将源数据集和目标数据集传递到批处理?
答:如果要处理FME工作空间,则不一定需要在批处理命令中定义源和目标文件,它们已在工作空间中定义。
但是,出于文档目的以及尚未定义数据集的工作空间,源数据集和目标数据集在FME中保存为参数(或宏)。参数是在运行时传递到工作空间的一种变量类型。默认情况下,源数据集和目标数据集设置为参数,您可以按如下方式定义参数SourceDataset和DestinationDataset的值例如,当您有多个源数据集时,您需要定义SourceDataset_<formatname>_1,其中<formatname>是源数据格式的缩写名称,例如IGDS。
您可以通过使用以下格式从命令行运行FME工作空间来将值传递给参数...
fme<workspacename>.fmw--<myparametername><parametervalue>
例如,将值“myfile.dgn”传递给工作空间project1中的参数“SourceDataset_IGDS_1”
fmeproject1.fmw--SourceDataset_IGDS_1myfile.dgn
2、如何将多个源数据集和目标数据集传递到批处理?
1.使用具有DOS变量的脚本文件。例如:
for %%f in (*.dgn) do "c:\programfiles\fme\fme.exe" C:\FMEInput\dgn2dxf.fme --SourceDataset "%%f" --DestDataset "%%~nf.dxf"
3、命令行太长不起作用,有没有办法绕过长命令行?
答:是的。命令行参数可以存储在文件中,并由FME使用语法读取...
fmePARAMETER_FILE <parameterFile>
参数文件必须包含运行FME所需的所有值。如果创建名为“myparamfile.par”的参数文件。参数文件的内容将如下所示:
myworkspace.fmw --PARAM1 value1 --PARAM2 value2
并运行方式:
fme PARAMETER_FILE myparamfile.par
不幸的是,你不能混合PARAMETER_FILE和其他命令行参数,所以:
fme PARAMETER_FILE myparamfile.par --PARAM3 value3
参数无效,FME将忽略PARAM3
FME和DOS批处理文件
所附示例(请参阅CompleteBatchExample.zip中的附件:translate.bat)将DWG文件目录转换为GML文件。首先运行验证转换,然后将通过验证的文件转换为GML。任何未通过验证或转换的文件(这也将处理fme.exe崩溃)都将放置在FAILED目录中。所有其他文件都放在“已完成”目录中。每个转换的单独日志文件都放在LOGS目录中。
还会生成一个报告文件,提供每个转换的结果(通过或失败),并指示转换失败的原因。
如果转换失败,报告文件将通过电子邮件发送给用户。
moveFilesBack.bat文件会将DWG文件放回SOURCE目录,以便可以再次测试translate.bat。
此示例中使用了以下命令、字符和变量。
1、有用的DOS命令
DIR
列出目录中的文件。DIR /B可用于创建文件列表。
FIND (FINDSTR)
用于在日志文件中搜索特定短语。在较新版本的Windows中,FIND命令已被FINDSTR命令取代。
FOR
用于运行使用多个文件的转换。每个文件都使用自己的转换。
IF
在批处理程序中执行条件处理。
ECHO
用于将文本发送到屏幕或文件。或输出一个空行(ECHO.)。
MOVE
将文件从一个目录移动到另一个目录。
MD
用于创建目录。如果输出目录尚不存在,FME有时会遇到问题。
DEL
用于删除不再需要的文件。DEL/Q%LOG%\*.*将删除所有日志文件,而无需征得许可。
PAUSE
在调试期间很有用。用于防止DOS窗口在转换完成后关闭。
SET
用于设置变量。对于设置目录名称非常有用,以便有一个位置可以编辑它们,并避免需要多次键入它们。
SetLocal EnableDelayExpansion/EndLocal
如果要使用!ERRORLEVEL!的FIND,SetLocalEnableDelayExpansion必须在文件的开头,EndLocal在结尾。这会延迟ERRORLEVEL的评估,否则它将在批处理文件启动时完成,并且ERRORLEVEL实际上不是FIND的ERRORLEVEL。
2、有用的DOS字符
^
这是一个转义字符。它可以避开回车符,因此它可以充当延续字符(只需确保不要在它后面放置空格)。
fme acad2gml_load.fmw --SourceDataset_ACAD "%%F"^--DestDataset_GML"%OUTPUT%\%%~nF.gml"^--LOG_FILE"%LOG%\%%~nF_load.log"
等同于
fme acad2gml_load.fmw --SourceDataset_ACAD "%%F"--DestDataset_GML"%OUTPUT%\%%~nF.gml"--LOG_FILE"%LOG%\%%~nF_load.log"
|
用于将一个命令的结果通过管道传送到另一个命令中。FME|FIND“Build”将找到FME的内部版本号。
>
将命令(如ECHO)的输出发送到新的文本文件。这将覆盖现有文件。
>>
将命令(如ECHO)的输出追加到新的文本文件中。这不会覆盖现有文件。
::
用于创建注释行。这优于使用REM-它更快,并且对注释中使用的字符没有限制。
@
防止回显命令,即使ECHO设置为ON也是如此。
3、有用的变量
!ERRORLEVEL!
用于返回FIND的错误级别。值为0表示已找到搜索字符串,值为1表示找不到搜索字符串。使用此选项而不是%ERRORLEVEL%。此变量在命令运行时展开,而不是在批处理文件启动时展开。
%DATE%
返回当前日期。可用于创建时间戳。
%TIME%
返回当前时间。可用于创建时间戳。
%CD%
返回当前目录。从中运行批处理文件的目录。
Password
我通常会创建一个包含我的密码的PW环境变量(用户变量)。然后,我可以使用%PW%在批处理文件中调用我的密码,而不是将我的密码添加到实际的批处理文件中。