Command-Line Interface
While FME's graphical user interface is well suited for most uses, FME also has
a powerful and flexible command-line interface that enables it to be used as a
component of a batch processing environment.
Starting FME from the Command Line
Type fme on the command line to start the FME command-line utility.
Using Command-Line Options
The fme command supports the following options:
Syntax
Reference Section
fme COMMAND_FILE <commandFile>
Executing Batch Files (Multiple Runs Per Session)
fme Generate ...
Generating Mapping Files
fme GENTRANS
Performing Generic Translations
fme LIST_TRANSFORMERS [VERBOSE]
fme LIST_UNLICENSED_TRANSFORMERS
Listing Transformers
fme <mappingFile>
Running Custom Mapping Files
fme PARAMETER_FILE
Generating Mapping Files
fme PROTECT <sourceFile> <destFile>
Reading Command-Line Parameters from a File
fme <TclFile> ...
Reading Command-Line Parameters from a File
Executing Batch Files (Multiple Runs Per Session)
fme COMMAND_FILE <commandFile>
This option is used to execute an FME batch file, as follows:
fme COMMAND_FILE <commandFile>
Normally, FME starts up and shuts down for each translation. In cases where
users want to process a large number of files, the time taken to start and stop
can become significant. In order to operate more efficiently in such situations,
FME supports a mode where it runs several times in a single session without the
resources required to restart.
To use FME in this way, a command file must be created that consists of multiple
FME command lines. These command lines are executed in the order they are
specified when FME is run.
A command file is invoked using the following syntax:
fme COMMAND_FILE <cmdFile>
The command file must contain one command per line. Line continuation characters
(\) can be used to split commands over several physical lines in the file. The
commands that can be processed in this way are: mapping file generation, running
a mapping file, and even executing another batch file. For example, the command
file might contain lines like:
c:\dxf2dgn.fme --SourceDataset c:\in1.dxf --DestDataset c:\out1.dgn
c:\dxf2dgn.fme --SourceDataset c:\in2.dxf --DestDataset c:\out2.dgn
Command lines that generate mapping files could also be present in the command
file. Notice that the word "fme" is not present as the first word of each
command, as it would be if this were a DOS Batch (.BAT) file.
Mapping files run in this way should contain LOG_FILENAME lines so that
statistics on FME performance are gathered. Alternately, a LOG_FILENAME could be
specified at the end of each command line:
c:\dxf2dgn.fme --SourceDataset c:\in1.dxf --DestDataset c:\out1.dgn LOG_FILENAME
c:\fme.log
c:\dxf2dgn.fme --SourceDataset c:\in2.dxf --DestDataset c:\out2.dgn LOG_FILENAME
c:\fme.log
An example batch run might look like this:
fme COMMAND_FILE c:\fmebatch.cmd
CONTINUE_ON_FAIL
The CONTINUE_ON_FAIL optional keyword controls whether or not to continue
running the translations in the command file. If its value is no, all the
translations will fail if one translation fails.
fme COMMAND_FILE fmebatch.cmd CONTINUE_ON_FAIL no
If the keyword is not used, then all the translations will run, and a summary of
the failures is output at the end.
Return Codes
When FME is run as a command-line utility, it produces informational messages on
its standard error output stream. When the mapping file generation or
translation has completed, FME will exit with a return code of 0 if there was no
error, and with -1 if there was. In general, a calling script should test for
zero as a successful return code and non-zero as a failure.
Note that it is possible for FME to exit with a zero return code, indicating
success even if no output was produced. A variety of situations result in this
condition; for example, if a query was issued to a spatial database that
returned no features, the translation would succeed even though there was no
output. Software calling FME to perform translations may wish to do additional
checks on the output data to ensure that something was produced.
Generating Mapping Files
fme Generate
This option is used to generate a mapping file without performing a translation.
It is equivalent to using File > Generate from the FME Universal Translator user
interface, and is used as follows:
fme Generate ...
Note: You can generate mapping files in this way; however, Safe Software
recommends that you use Workbench to configure translations.
Here is some example syntax:
fme Generate <readerType> <writerType> <sourceDataset> <mappingFile> \
[+DATASET <additionalSourceDataset>]* \
[+MERGE_SCHEMAS (yes|no)] \
[+FME_DEBUG DUMP_SCHEMA] \
[--APPEND_LINE <text>]* \
[--<macroName> <value>]*
Note that pre-FME-2013, the line [--APPEND_LINE <text>]* was [--APPEND_LINE
<text>]
Tip: It is usually easier to customize a mapping file generated by FME or
Workbench than to build a mapping file from scratch. The generated mapping file
may be edited and customized for the particular translation. See Running Custom
Mapping Files.
The following example, which should appear as one continuous line,
fme Generate SHAPE MIF /usr/shapedata/92b034 /tmp/s2m.fme
would generate a mapping file in /tmp/s2m.fme which could be used to translate
all the Shape files in the /usr/shapedata/92b034 directory to MapInfo MID/MIF.
Additional source datasets of the same source format can be combined in the
initial generate command to create a mapping file that will merge them all when
run. The +DATASET directive is used to specify an additional dataset, and this
can be repeated multiple times. In such a situation, the +MERGE_SCHEMAS
directive controls whether or not all the specified datasets are examined for
schema information. If MERGE_SCHEMAS is set to no, then only the <sourceDataset>
has its schema extracted. This is used when it is known that all the input
datasets have the same schema. If it is set to yes, then each of the source
datasets specified have their schema extracted, and the union of these schemas
is used to generate the mapping file. The default for MERGE_SCHEMAS is no.
The +FME_DEBUG DUMP_SCHEMA can be added to the generate command line to have the
schema information from the source dataset logged to standard output when the
generate is done. This can be used to determine why a generated mapping file
does not seem to have the appropriate schema information in errant
circumstances.
When the --APPEND_LINE option is used, the specified text is added at the end of
the mapping file on a line by itself.
Performing Generic Translations
This method of using the FME translation engine allows translations to be
performed without requiring a workspace or mapping file to provide the
translation rules. When used in this mode, the FME will make a "best guess" for
a translation between two formats.
GENTRANS
FME's GENTRANS mode is a simple and easy way to perform a quick translation
between two formats.
GENTRANS is useful when you need to perform quick translations between different
formats, and don't need to perform any special operations that might require
either Workbench or a mapping file. GENTRANS performs translations that are very
similar to the Universal Translator's Generate/Translate functionality.
Command-Line Syntax
Fme GENTRANS [OPTIONS] <param-file>
Fme GENTRANS [OPTIONS] <param-file> <source-dataset> <dest-dataset>
Fme GENTRANS [OPTIONS] < source -format> <source-dataset> <dest-format>
<dest-dataset>
Fme GENTRANS [OPTIONS] < source -format> <source-dataset> <source-directives>
<dest-format> <dest-dataset> <dest-directives>
Fme GENTRANS [OPTIONS] <session-directives> < source -format> <source-dataset>
<source-directives> <dest-format> <dest-dataset> <dest-directives>
Description
The minimum amount of information that FME GENTRANS requires in order to
function is:
- Source/Destination Formats: The "Short Name" as listed in the Formats
Gallery.
- Source/Destination Datasets: Where the data should be read from, and written
to.
In addition to the required configuration information, GENTRANS also allows
directives to be passed directly to the FME translation session, as well as to
the individual readers and writers.
The above configuration information can be passed to GENTRANS either via the
command line, or via a parameter file.
As shown in the synopsis, there are are several different command line forms
allowed.
Note: The Generic Translator is implemented using FME Objects - using some
advanced functionality requires an understanding of FME Objects.
The components of the command line are:
<param-file>
The location of the parameter file
<source-dataset>
The location of an existing dataset.
<dest-dataset>
The location where the data will be written to. Note: If the dataset exists, it
will be overwritten.
<source-format>
The short name of the source format.
<dest-format>
The short name of the destination format.
<session-directives>
Any directives to pass to the FME session.
Note: See FME Objects documentation at
www.safe.com/download/index.php#obj_documents
<source-directives>
Any directives to pass to the FME reader. Note: See FME Objects documentation
www.safe.com/download/index.php#obj_documents.
<dest-directives>
Any directives to pass to the FME writer. Note: See FME Objects documentation
www.safe.com/download/index.php#obj_documents.
Note: Directives are specified using a comma-separated list of strings. Where
possible, it is recommended that directives not be specified on the command
line, but are instead put in a parameter file.
Options
The following options are currently supported. These options must be specified
right after GENTRANS on the command line.
[LOG_STANDARDOUT <YES|NO>]
If YES, the session will log to standard output as the translation executes.
[LOG_ TIMINGS <YES|NO>]
If YES, the standard FME timings will be logged.
[LOG_FILENAME <filepath>]
If specified, an FME translation log will be created at the specified location.
If not specified, no log file will be created.
[GUI]
If specified, an FME dialog will pop up, allowing the source and destination
formats and data to be specified. The selected formats and data will override
any formats or data specified on the command-line or in a parameter file.
[GENERATE <param-file>]
If specified, the translation will not run, and a parameter file will be
generated instead.
[GENERATE_CMDLINE]
If specified, the translation will not run, and the command-line arguments will
be printed to standard output. When used with the GUI option, this option allows
users to determine which command-line options to use for a translation.
[PIPELINE <pipeline-file>]
Specifies a file containing an FME factory pipeline. Features read from the
source will be processed using this pipeline before being written to the
destination.
Wildcard Support
Instead of exactly specifying source datasets, it is possible to use the "*"
character to specify several files at once. This is especially useful for
merging several files.
For example,
GENTRANS SHAPE "*.shp" FFS out.ffs
Note: When using wildcards, the source dataset must be enclosed in quotation
marks to prevent the shell's file globing mechanism from taking over.
Parameter File Format
The GENTRANS parameter file uses a simple format that is very similar to older
Window's INI files. Each parameter file is broken into sections. Within each
section, there are multiple key-value pairs.
Syntax
The syntax for the parameter file is very simple. Sections begin with the
specification of a section header, and run until either another section header,
or the end of the file, is reached.
Each section header occurs on its own line and are of the form:
[ SectionName ]
Within each section, there are multiple key-value pairs of the form:
Key = Value
Sections
The following sections are currently supported:
SESSION
Specifies session-specific configuration options:
GENTRANS-specific keys:
GENTRANS_PIPELINE: The name of a pipeline file.
Any other key-value pairs are assumed to be session directives and will used to
initialize the session.
SOURCE
Specifies source-specific configuration options:
GENTRANS-specific keys:
GENTRANS_FORMAT: The short name of the format
GENTRANS_DATASET: The dataset that will be read
Any other key-value pairs are assumed to be reader directives and will be passed
to the reader.
DESTINATION
Specifies destination-specific configuration options:
GENTRANS-specific keys:
GENTRANS_FORMAT: The short name of the format
GENTRANS_DATASET: The dataset that will be written
Any other key-value pairs are assumed to be writer directives and will be passed
to the reader.
CONSTRAINTS
Constrain the reading to a certain subset of the dataset.
Note: Using constraints is an advanced functionality, and assumes familiarity
with FME's FME Objects API.
This section's key-value pairs are used to construct a constraints feature that
will be used with the reader's setConstraints method.
Either a bounding box, or a set of coordinates is required to construct the
feature. To specify a list of coordinates, use the following keys:
GENTRANS_X_COORDS, GENTRANS_Y_COORDS, GENTRANS_Z_COORDS. Each of these keys take
a comma-separated list of floating point numbers as a value.
Note: If a 2 dimensional constraint is desired, the GENTRANS_Z_COORDS key does
not need to be specified.
For example,
GENTRANS_X_COORDS = 0.0, 1.5, 1.5, 0.0, 0.0
GENTRANS_Y_COORDS = 0.0, 0.0, 2.5, 2.5, 0.0
A bounding box is specified with the GENTRANS_BOUNDING_BOX key name. The value
must have the following format:
<minx>, <maxx>, <miny>, <maxy>
where minx, maxx, miny, and maxy are floating point numbers.
For example,
GENTRANS_BOUNDING_BOX = 0.0, 2.5, 0.0, 1.5
In addition to the geometric constraints, a search type must also be specified
using the FME_SEARCH_TYPE key. Values for the search type can be found in the
FME Objects documentation.
For example,
FME_SEARCH_TYPE = FME_ENVELOPE_INTERSECTS
Certain search types require additional key-value pairs to be specified as
parameters.
Any additional key-value pairs in this section will be passed as attributes on
the constraints feature. See the FME Objects documentation for more details.
Parameter File Generation
GENTRANS offers a GENERATE mode that provides a quick method of creating
parameter files. This mode is especially useful for formats that require several
directives.
To generate a parameter file, take any valid GENTRANS command-line, and add the
GENERATE <parameter file> option. The translation will not run, and a new
parameter file will be generated (even if another one was used).
Usage of the GUI option further increases the usefulness of this feature by
allowing a user to specify format options in a dialog box.
For example,
GENTRANS GUI GENERATE filename.param SHAPE foo.shp MIF foo.mif
Examples
Using Coordinate System Reprojection
FME GENTRANS LOG_FILENAME gentrans.log ACAD drainage_design_P001.dwg
COORDSYS,BritishNatGrid ACAD drainage_design2_P001.dxf COORDSYS,BritishNatGrid
Translating with a Parameter File
Generating a parameter file:
FME GENTRANS GUI GENERATE key.param ACAD drainage_design_P001.dwg ACAD
drainage_design2_P001.dxf
Using a parameter file:
FME GENTRANS LOG_FILENAME logfile.txt parameter_file.txt
Generating a GENTRANS Command from a GUI
This example opens a GUI which outputs a GENTRANS command line. To run it,
prefix it with FME GENTRANS.
FME GENTRANS GUI GENERATE_CMDLINE
Generating a GENTRANS Commmand from a Parameter File
FME GENTRANS GENERATE_CMDLINE key.param
Translating with Reader and Writer Directives
FME Gentrans ACAD "S:\key-systems\drainage_design_P001.dwg"
"RUNTIME_MACROS,\
"METAFILE,acadScan,_EXPAND_BLOCKS,no,_EXPAND_VISIBLE,no,_BULGES_AS_ARCS,no,_STORE_
BULGE_INFO,yes,_READ_PAPER_SPACE,no,ACAD_IN_READ_GROUPS,no,_IGNORE_UCS,no,_MERGE_S
CHEMAS,YES\",META_MACROS,\
"Source_EXPAND_BLOCKS,no,Source_EXPAND_VISIBLE,no,Source_BULGES_AS_ARCS,no,Source_
STORE_BULGE_INFO,yes,Source_READ_PAPER_SPACE,no,SourceACAD_IN_READ_GROUPS,no,Sourc
e_IGNORE_UCS,no\
",METAFILE,acadScan,COORDSYS,BritishNatGrid,IDLIST," ACAD
"S:\key-systems\drainage_design_P001.dxf" "RUNTIME_MACROS,\
"_ATTRKIND,external_attributes,_REL,Release2000,_TMPL,S:\key-systems\drainage_desi
gn_P001.dwg\",META_MACROS,\
"Dest_ATTRKIND,external_attributes,Dest_REL,Release2000,Dest_TMPL,S:\key-systems\d
rainage_design_P001.dwg\",METAFILE,ACAD,COORDSYS,BritishNatGrid"
Using GENTRANS for Batch Processing
for /R x: %%F in (*.shp) do fme gentrans LOG_FILENAME "y:\%%~pF%%~nF.log"PIPELINE
ground2grid.fmi SHAPE "%%F" SHAPE "y:\%%~pF"
Listing Transformers
The following parameters, which are used almost exclusively for internal testing
purposes, list licensed and unlicensed transformers. If the VERBOSE option is
specified, all functions and factories used by each transformer will also be
listed.
fme LIST_TRANSFORMERS [VERBOSE]
fme LIST_UNLICENSED_TRANSFORMERS
Running Custom Mapping Files
fme <mappingFile>
This option, the most common use of the FME command-line utility, is used to
translate data from one format to another. It is equivalent to using File > Run
from the graphical user interface and is used as follows:
fme <mappingFile> [--<macroName> <value>]* [[-]<overrideKeyword> <value>]*
[+<addKeyword> <value>]*
When FME is invoked in this way, all parameters pertaining to the translation
session are extracted from the mapping file specified. The additional optional
arguments are used to override or supplement the contents of the mapping file.
For example,
fme roadgen.fme
Running Custom Mapping Files
fme <mappingFile>
This option, the most common use of the FME command-line utility, is used to
translate data from one format to another. It is equivalent to using File > Run
from the graphical user interface and is used as follows:
fme <mappingFile> [--<macroName> <value>]* [[-]<overrideKeyword> <value>]*
[+<addKeyword> <value>]*
When FME is invoked in this way, all parameters pertaining to the translation
session are extracted from the mapping file specified. The additional optional
arguments are used to override or supplement the contents of the mapping file.
For example,
fme roadgen.fme
Defining Macros
Frequently, a mapping file intentionally references a macro that it does not
define. It is assumed that when the mapping file is used, such macros will be
given values on the command line.
Macros are defined on the command line by preceding the macro name with two
dashes. The value that follows the macro name is assigned to it.
Note: Macros specified on the command line provide only an initial value for the
macro. If the macro is defined anywhere in the mapping file, the mapping file's
definition overrides that given on the command line.
In the following example, the roadgen.fme file contains the line:
SAIF_DATASET $(saifFile)
However, the saifFile macro is not defined anywhere in this mapping file. A
value for the macro must be provided on the command line:
fme roadgen.fme --saifFile /usr/data/92j013.zip
Overriding Mapping File Settings
Any keyword settings in the mapping file may be overridden on the command line
simply by listing the keyword, optionally preceded by a dash, followed by its
new value.
Any values for the keyword that are already in the mapping file will be
overridden by the new value.
The following example sets the READER_TYPE keyword value to SAIF and the
WRITER_TYPE keyword value to SHAPE. The values provided for READER_TYPE and
WRITER_TYPE in the mapping file are ignored.
fme roadgen.fme -READER_TYPE SAIF -WRITER_TYPE SHAPE
Note that since the dashes are optional when keyword values are being
overridden, the previous example is equivalent to:
fme roadgen.fme READER_TYPE SAIF WRITER_TYPE SHAPE
Extending Mapping File Settings
The keyword settings in a mapping file may be extended on the command line by
preceding the keyword with a plus sign (+), and listing the additional values
for the keyword.
The result is the same as if the keyword and values were placed at the end of
the mapping file. This is only useful for keywords accumulating their values and
may be specified more than once in the mapping file. It is most commonly used to
add to the _IDs being read by the reader module during an FME session.
The following example adds the Lanes ID to the other IDs that were requested for
translation in the roadgen.fme mapping file. If this mapping file originally
included a line stating SAIF_IDs Roads Railroads and the command line below was
used, the SAIF Reader would process the features in the Roads, Railroads, and
Lanes collections.
fme roadgen.fme +SAIF_IDs Lanes
However, if the plus sign (+) was not used and the command line below was given
instead, then the SAIF_IDs on the command line would override those in the
mapping file, and only the Lanes collection would be processed.
fme roadgen.fme -SAIF_IDs Lanes
Reading Command-Line Parameters from a File
fme PARAMETER_FILE ...
This option reads command-line parameters from a file. Although the number of
macros or keywords that can be specified on the FME command line is unlimited,
some operating systems place a limit on overall command-line length.
This option serves as a workaround when such a limit is reached - it tells FME
to read the command-line parameters from a file as follows:
fme PARAMETER_FILE ...
Note: Two additional FME command-line options can be used when FME is run in
server mode. These options are documented in the FME Server Administrator's
Guide (available at www.safe.com/support/onlinelearning/documentation.php).
Password Protecting a Mapping File
This option is used to permanently protect a mapping file. You do not require a
password: once you protect a file using this option, you cannot remove the
protection.
fme.exe PROTECT <sourceFile> <destFile>
Using a password
If you want to protect a file but allow access with a password, you can follow
the steps in the example below:
1 Create an .fmi file (for example, password.fmi) that includes the following
information:
MACRO password secretPass
MACRO username secretUser
2 In your main mapping file, include the following statement:
INCLUDE password.fmi
3 From the command line, protect password.fmi:
fme PROTECT password.fmi passwordp.fmi
4 In the main mapping file, change the INCLUDE line to:
INCLUDE passwordp.fmi
Executing Tcl Programs
fme <TclFile>
FME can also be requested to execute Tcl (version 8.5.2) scripts, which in turn
can run FME translations and perform shell commands through its command-line
interface. A Tcl program is executed using the following syntax:
fme <TclProgramName> [<argument>]*
where TclProgramName must have a .tcl extension. Any additional arguments will
be passed to the Tcl program in the argv list, and argc will be set to the
number of additional arguments. For example, if test.tcl contains these lines:
puts "argc is: $argc"
puts "argv is: $argv"
foreach i $argv {
puts $i
fme $i.fme --SourceDataset $i.e00
}
the FME command-line utility is then invoked as follows:
fme test.tc train railway
And as a result, FME executes the following commands:
fme train.fme --SourceDataset train.e00
fme railway.fme --SourceDataset railway.e00
Tcl Functions
In a Tcl script, FME provides the following Tcl functions:
FME_CommonPrefix
Returns the longest common prefix shared by all input string arguments.
Syntax:
FME_CommonPrefix <arg1> <arg2> . . .
- All arguments are strings. Any number of strings may be passed in.
- Returns a string.
Example:
FME_CommonPrefix "c:/data1/bob.txt" "c:/data1/subdir2/joe.txt" returns "c:/data1/"
FME_RecursiveGlob
Expands all input arguments into a single list of filenames, according to the
pattern matching rules described in Reader Datasets.
Syntax:
FME_RecursiveGlob <arg1> <arg2> . . .
- All arguments are strings. Any number of strings may be passed in.
- Returns the files as a list of strings.
FME_TempFilename
Generates a temporary filename in FME temporary directory. The filename is
guaranteed to be a new file. The returned filename will have no extension.
Note that FME will create an empty file with the given name; you must delete it
when you are done.
Syntax:
FME_TempFilename
Example:
FME_TempFilename
returns "c:/Temp/FME_a02724"