Whats new in V4.00 New programs o Getname. The converse of setname - it displays the same attributes which may be set by setname, plus a wide range of others. It also allows use of a template file with substitution parameters so that multiple attributes for each object can be retrieved and formatted in any way. o Nsrename. Allows renaming of files and directories in any name space without affecting the name in other name spaces. It requires NW 3.12 or NW 4.x. o Schema. Displays object classes and their definitions, attributes and their rules, plus (optionally) the object classes for which each attribute is valid. o Orgroles. Add occupants to, removes occupants from and lists the occupants of organizational roles. o Delprop. Can delete any property which NetWare allows to be deleted from any type of bindery object. o Scanprop. Lists the properties of any type of bindery object giving their type ('item' or 'set'), whether they are static or dynamic, and their security. Displaying the contents is optional. Scanprop can decode the contents of all well known properties and those which it cannot decode are displayed in hexadecimal. o Serv_cmd. Allows various commands to be executed on the file server such as loading and unloading NLMs, mounting and dismounting volumes, executing an NCF file, adding a name space to a volume, and displaying loaded NLMs and the current values of SET parameters. Programs to which NDS support has been added o Accexp o Getequiv o Jrbmap o Pwdexp o Setequiv 32 bit versions of JRButils o 32 bit versions of most programs for use under Windows NT and Windows 95 clients are included in this release. These may run faster under some circumstances, do not have the memory limitations of the 16 bit versions allowing sorting of large numbers of items and the use of a more efficient sorting algorithm. They may also be run from CGI scripts. Modifications common to multiple programs o /k now clears connections to other servers to which the program has authenticated. Previously it would only clear bindery based connections. o Added a check for a valid server connection. Under NETX and the VLMs this was unnecessary as they failed to load if a server could not be found, and all programs checked if they were loaded. However client32 will load even when a server cannot be found so the extra check is necessary to ensure a meaningful error message is given. o All programs retrieving a path from the "Home Directory" attribute can now cope with the path being in a non-DOS name space. They also cope with the fact that nwadmin-NT and nwadmin-95 place a path in the "Home Directory" attribute in the LONG name space when it is loaded on the target volume, but set the name space field to DOS. o All programs accepting a path as a parameter or as a value for an option can now accept paths in the LONG name space in addition to the DOS name space. Each program will first check the validity of the path in the LONG name space if that is loaded on the volume. If that fails, a DOS path is assumed. All programs work with DOS paths internally, and currently DOS paths are given in any output except for sethome2 and chkhome where path names are given in the name space in which they are stored in the "Home Directory" attribute. A limitation exists when a LONG path includes a file name with wild cards. A filename without wild cards can be converted to a DOS name, but one containing wild cards cannot. As the programs work with DOS names internally, a file name containing wild cards must be a DOS name e.g. vol1:photography\hippo* is valid, vol1:photography\hippotamus23 is also valid but vol1:photography\hippopotamus* is not as a search for DOS names matching hippopotamus* will fail. o Added support for Template objects to various programs such as grpadd, grpdel, getbal, setbal, getrest, setrest etc. They will allow values to be set/viewed for a single template object, but currently there is no means to use wild cards with template objects. For the wild carded name, the object class 'User' will be assumed. o Added support for video mode settings of 43 and 50 lines per screen. o In the 32 bit versions of programs which are likely to sort large numbers of items (e.g. listobj, getrest), extra code has been added to do faster sorts. Items to be sorted are stored in a linked list and the default is to do a bubble sort which is very inefficient. To sort by any other method requires extra code and extra available memory to convert the linked list to an array. Hence, its implementation only in the 32 bit versions. Modifications to individual programs Accexp o Added /l and /e for compatibility with other programs. Chkhome o Fixed a problem where /v=d was not working. o Changed /x (for specifying a context to search from when locating users) to /z. o Added (new) /x to allow searching of subcontainers when is an NDS object. Copyuser o Modified to copy sparse files correctly. Creatobj o Fixed a cosmetic problem where it was reporting "Null pointer assignment" upon exit when /d was used. This was caused by an attempt to free the same block of memory twice during the final tidyup before exit. o Creatobj was reporting an error when using /m and a username was specified without a preceding server name. It now accepts both /m=john and /m=yogi\john. o Creatobj-NDS was failing to grant R rights to [Root] for the "Members" attribute when creating NDS groups. o Fixed some problems in creatobj-NDS when creating a user in NDS mode and using /b. Under some circumstances, it would attempt to create the mail directory on the wrong server, and to add the user to the wrong EVERYONE group. o Added /$ to creatobj-NDS to force it to convert the case of the name of the object so that the first character is uppercase and the remainder are lowercase. o Fixed a problem when /n was given the name of an object of class 'template'. Creatobj was complaining that it must be a user. o Added support for the various new attributes specific to template objects. Most of these are intended to provide rights and restrictions to be applied to new users without them actually applying to the template itself. For example, trustee assignments and volume restrictions can be stored in such attributes. The only known attribute not supported is the "Setup Script". Creatobj will give an error if the "Run Setup Script" attribute has a value of 'true'. o Added support for creating application objects. The path to the application must be specified via /d and the caption will be set to the application object's name. No other fields can be set. Delobj o Added /b for use in NDS mode, to force dereferencing of alias objects. The default is not to. Dquota o Modified it to allow displaying of quotas on the directory used by the NDS aware version of Pegasus Mail. This is the PMAIL subdirectory of the user's home directory. The home directory is obtained from the bindery HOME_DIR property or the NDS "Home "Directory" attribute. Use /m=n to display quotas on these directories. Fsupdate o When using /d and the path did not include a file name, fsupdate would sometimes fail to attempt to delete any files, and then give errors because it could not delete non-empty directories. This was caused by appending '/*' to the path when space had not been reserved for the extra two characters. o Fsupdate did not attempt to retain file ownership if the person running it was not supervisor equivalent (bindery mode) or had supervisory rights to their own object (NDS). As I have just found that having supervisory directory rights allows changing ownership, fsupdate will now retain ownership when copying files if the user has supervisory directory rights but not supervisory bindery or NDS rights. o Corrected a problem where /o did not allow overwriting of files flagged transactional. o Modified so that "*." now selects all files without an extension. Previously it selected all files. o Enabled the use of /s with /r and /d when file names are given. e.g. fsupdate vol1:phone.exe /d/s would delete all copies of phone.exe from vol1:. o Corrected a problem where /o did not allow deleting of files flagged delete inhibit but not read only, or files flagged transactional. o Added /n to allow suppression of default actions /n=s Suppress checking the available space before copying each file /n=w Suppress warnings that files owned by the LONG, NFS or FTAM name space may not be copied correctly. o Modified so that when using /m trustee assignments are also mirrored when /t is used. Previously, trustee assignments were copied, but those already in the target directory, but not in the source directory were not removed. o Modified to copy sparse files correctly. Getbal o Modified so that non-existent values for balances and accounting holds are no longer treated as errors, and can now be used in filters e.g. 'getbal * b = none'. This allows usercodes meeting this criteria to be output in a form which can be input to setbal. o Modified to allow displaying of balances and credit limits for print servers. Getequiv o Added another check when /c is used. Getequiv will now also report when a bindery object has more than 32 security equivalences. o Added /n to provide a more flexible range of output options. o Added other options for use in NDS mode. Getquota o Modified it to allow displaying of quotas on the directory used by the NDS aware version of Pegasus Mail. This is the PMAIL subdirectory of the user's home directory. The home directory is obtained from the bindery HOME_DIR property or the NDS "Home "Directory" attribute. Use /m=n to display quotas on these directories. o Changed the existing use of /x to /r. o Added (new) /x to allow processing users in subcontainers of the specified container when [entity] is an NDS object. Getrest o In NDS mode, getrest-NDS would sometimes behave unpredictably when displaying station restrictions, due to an uninitialized pointer. o Modified getrest so that when filtering on restrictions with date/time values, it does not do an exact match down to the last second e.g. 'getrest .*.sales.acne lld eq 25-feb-97' would assume a time of 00:00:00 and previously produce a match for actual last login dates and times of exactly 25-feb-97 00:00:00'. Now it uses a range for any unspecified part of the time so that 'lld eq 25-feb-97' would match 25-feb-97 00:00:00 through 25-feb-97 23:59:59, and 'lld eq 25-feb-97 10:23' would match 25-feb-97 10:23:00 through 25-feb-97 10:23:59. Note that if you specify zeros in the time e.g. 10:23:0 it will do an exact match. o Fixed a problem where getrest could display a value of 'no' for "user can change password" when nwadmin/netadmin showed 'yes'. The problem arose where no attribute existed. Normally for a boolean type attribute, the absence of the attribute is equivalent to a value of 'false', but for this particular attribute, the absence of the attribute is treated the same as a value of 'true'. o Modified to allow dates given as 'today', 'tomorrow' and 'yesterday' to be followed by a signed integer representing an adjustment in days e.g. "tod-30". Grpadd o Fixed a problem where grpadd-NDS was not assigning R rights for [Root] to the "Members" attribute after creating a group. o Added /w to check the number of security equivalences before or after adding a member to a group. When /w is used without a value, a warning is given when a bindery user has more than 32 security equivalences after being added to the group. When /w is given a value, the user will not be added to the group when he/she already has 32 or more security equivalences. When a user's rights are calculated under NW 2.x and 3.x, only the first 32 security equivalences are considered. /w is ignored in NDS mode. Grplist o Modified so that when listing members for multiple groups, the groups are sorted alphabetically. o Added /x to allow searching of subcontainers for groups, and when /u is used. o Fixed a problem when using an input file, where it always operated in bindery mode. Home2 o Added /d to allow specifying a drive letter to be mapped to the home or mail directory. Previously only the current drive could be mapped. Jrbpurge o Modified to allow dates for /m given as 'today', 'tomorrow' and 'yesterday' to be followed by a signed integer representing an adjustment in days e.g. /m="tod-30". Note that when using a negative adjustment, it must be enclosed in double quotes to prevent the '-' being interpreted as the beginning of another option. o Added /q to query whether or not to purge files. Killconn o Added /b allowing the clearing of connections which have been logged in for longer than or less than the specified time. The time is given in days, hours and minutes e.g. /b=1:0:0 would result in the clearing of connections which have been logged in for more than 1 day (24 hours). To specify 'less than', prefix the time with a '-' and enclose the time in double quotes to prevent the '-' being interpreted as denoting a new option e.g. /b="-0:5:0" would clear connections logged in for less than 5 hours. o Added /g to allowing clearing of user connections where the users are members of one or more groups e.g. 'killconn * /g=econ,maths' would clear all user connections where the users were members of either the maths or econ groups. Killzero o Fixed a bug where killzero would delete Mac files with a zero length data fork but a non-zero length resource fork. The same was presumably true of FTAM files (does anyone use this name space?). Because I have not figured how to determine the length of the second data stream for an FTAM file, killzero will now not delete any files owned by this name space. o Fixed a bug where the use of /r was causing files to be deleted rather than retained (how embarassing!) o Changed the existing /x to /z. o Added (new) /x to allow processing users in subcontainers of the specified container when [entity] is an NDS object. Lscripts o Added support via /u for copying print job configurations from PRINTCON.DAT/PRINTJOB.DAT in the mail directory into the NDS "Print Job Configuration" attribute and vice versa. o Added support for viewing print job configurations. Makememb o Fixed a problem where makememb-NDS was not assigning R rights for [Root] to the "Members" attribute after creating a group. o Added /w to check the number of security equivalences before or after adding a member to a group. When /w is used without a value, a warning is given when a bindery user has more than 32 security equivalences after being added to the group. When /w is given a value, the user will not be added to the group when he/she already has 32 or more security equivalences. When a user's rights are calculated under NW 2.x and 3.x, only the first 32 security equivalences are considered. /w is ignored in NDS mode. Move_obj o Modified to allow the destination context to be omitted from the command line when using an input file, and a destination context to be given on each line in the input file. o Added /b for use in NDS mode, to force dereferencing of alias objects. The default is not to. Netcopy o Netcopy did not attempt to retain file ownership if the person running it was not supervisor equivalent (bindery mode) or had supervisory rights to their own object (NDS). As I have just found that having supervisory directory rights allows changing ownership, netcopy will now retain ownership when copying files if the user has supervisory directory rights, but not supervisory bindery or NDS rights. o /o did not allow overwriting of files flagged transactional. o Fixed a problem where netcopy was ignoring a trailing '.' on a file name so that it was copying all matching files rather than only those files without extensions. o Modified to allow a file name to be specified as part of the destination path when the source path includes a file name (without wild cards) so that a file can be renamed as it is copied. This feature works only for files owned by the DOS name space. If the file specified on the input side is found to belong to any other name space, the output file name is ignored. o Fixed a problem when using /c. Netcopy would correctly create the target directory if required and copy the DOS attributes from the source directory. However, if the source directory was not owned by the DOS name space, any name space information for the source directory was not copied, and the directory created would be owned by DOS. o Added /n=i to overcome a problem copying from CDROMs mounted as NW volumes. Files/directories on CDROM may appear to have incomplete inherited rights masks e.g. [SR F ], and it is usually desirable to copy these with a IRM of [SRWCEMFA]. Use /n=i to prevent copying of IRMs and to set them to [SRWCEMFA] instead. o Modified to copy sparse files correctly. OpenFile o Added /z for use with /d to clear the connections holding a file open. o Added /q for use with /d and /z to query whether or not to clear each connection. o Added /h to force an error level of 1 to be set when one or more open files are found. Use of /h results in error levels of 0 if an error occurs preventing the search for open files. o Added /d=t to allow searching for open files in the directory pointed to by and all its subdirectories, rather than just in that directory. o Modified so that it no longer gives an error when retrieving the path associated with an open file because the user running openfile has no rights to the directory. Instead it displays the open file as 'VOL1:[Path unavailable]/WHATEVER.EXE'. This situation typically occurs when the user is a console operator but does not have supervisory rights to the volumes. o Added /m to display locking information for open files. Pqmovjob o Modified to assume that when the queue's directory cannot be read from the bindery due to lack of rights, the queue directory is SYS:SYSTEM/xxxxxxxx.QDR where xxxxxxxx is the queue's object ID. Previously, pqmovjob would exit with an error when the queue directory could not be retrieved. Pqreljob o All versions were displaying garbage for the owner in the prompt when using /q. o All versions were failing to correctly detect whether the person running pqreljob was a queue user or operator. The test failed if the person was an operator or user due to group membership or being security equivalent to a operator or user. Pradd o A value specifying the printer type can now be given for /c allowing a default configuration to be assigned when a printer is created. Profiles o Modified so that by default 'profiles' grants/removes rights to the profile object's login script. o Added /n to suppress modification of rights to the profile's login script. o Added /v to view the users of the profile. Note that by default, the users are obtained by scanning the objects with read rights to the profile's login script. This should produce an accurate list, but if the rights are granted in a non-standard way, it will not. The alternative is to scan the NDS tree and 'profiles' will do this when /v is given a value corresponding to the context at which to begin the search e.g. /v=[root]. Pwdexp o Added /l and /e for compatibility with other programs. Renobj o Added /n to prevent renaming home directories when renaming users. o Fixed a problem where renobj was failing to recognise an existing bindery connection to another server when the server name was given in lowercase e.g. 'renobj yogi/jbaird bairdj'. o Added /c to allow changing of the case of existing NDS object names to (a) all lowercase, (b) all uppercase or (c) mixed i.e. the first character uppercase and the rest lowercase. o Modified to allow the use of wild cards in NDS object names for use with /c. o Added support for /o in NDS mode for use with /c and wild cards, so that the case of names can be changed for any class of object. o Added /b for use in NDS mode, to force dereferencing of alias objects. The default is not to. Requests o Fixed a problem where it would not show statistics for any connections on a NW 4.x server without any replicas. This was caused by the failure of a bindery function for getting connection information due to the lack of a bindery context. Salvlist o Modified to allow dates for /m given as 'today', 'tomorrow' and 'yesterday' to be followed by a signed integer representing an adjustment in days e.g. /m="tod-30". Note that when using a negative adjustment, it must be enclosed in double quotes to prevent the '-' being interpreted as the beginning of another option. Setacl o Modified to allow a trustee name and rights to be specified when using /v so that the output can be filtered on these values. Any value for rights will be treated as object rights. o Added /a for use with /v to allow filtering on attribute rights. It is possible to filter on both object and attribute rights at the same time. o Added /b for use with /v to force output for each object denoted by even when there are no matching ACLs. By default no output is produced where there are no matching ACLs. o Added /r to search the tree from [Root] for objects matching . /r would normally be used with /x and should be a common name without a context. o Added /x to scan all containers below that containing , or below [Root] if /r is used. o Added a value for /v (/v=a) to provide an alternative more compact output format when displaying ACLs for multiple objects. o Modified to allow 'N' to be specified as a value for rights allowing an ACL to be created containing no rights. o Fixed a problem occuring after installation of Groupwise 5.1 where setacl reported that the server was out of memory. Groupwise extends the schema sufficiently to result in setacl's buffer being too small when checking that the attribute given was valid for the object class. Setbal o Added /h which will remove accounting holds. This is not normally necessary, but a problem in the .exe version of Pcounter from A.N.D. Technologies has caused it to leave these in existence. o Added support for setting balances and credit limits for print servers. Setcx o Added /q to force setcx to prompt for an object name to search for. o Added /u to allow the object name to be stored in the DOS environment. The default variable name is USER, but an alternative may be specified by giving a value to /u e.g. /u=username. o Added /y to control the format of the username placed in the environment. o Added /o to specify the class of object to locate e.g. /o=ncp_server. Any object class may be given, and /o=any may be used where the object class is unknown. Sethome2 o Fixed a problem where the bindery only version and sethome2-NDS in bindery mode were failing to work when using an input file due to a failure to validate the path, leaving variables holding path components uninitialized. o Modified to allow a value to be given to /c. The value represents the trustee rights to be assigned to the directory e.g. /c=[RWCEMF]. The brackets are optional, the default is /c=[RWCEMFA], use /c=[] to assign no rights, use /c=x to not set a trustee assignment or to remove a trustee assignment. Note that the value specified via /c is set regardless of whether the directory existed previously or not, allowing trustee assignments to be set or removed for existing directories. o Added options /h and /i to overcome a problem where a customer reported an application failed to use the contents of the "Home Directory" attribute because of the forward slashes (/) placed in the path by sethome2. /h can now be used to force the use of back slashes (\) and /i can be used to change the slashes in existing attribute values. Use /i=b to change to back slashes, /i=f to change to forward slashes. o Added /r to allow copying of the home directory path from the "Home Directory" attribute to the bindery HOME_DIR property. o Fixed a problem combining /c (create the directory) with /a (an absolute path was given) where it was failing to create the directory. o Added /n to allow the path to be stored in the "Home Directory" attribute in any name space loaded on the volume. The path given on the command line may be in the DOS or LONG space and the path will be placed in the "Home Directory" attribute in the same name space unless /n is used. o Added /t to allow creation of home directories without setting the "Home Directory" attribute or HOME_DIR bindery property. /t must be used with /c. This feature may be useful to create a temporary set of directories for a bunch of users. Setname o Added /t to force truncation of the text where it exceeds the maximum length for the attribute. o Fixed a problem occuring after installation of Groupwise 5.1 where setname reported that the server was out of memory. Groupwise extends the schema sufficiently to result in setname's buffer being too small when checking that the attribute given was valid for the object class. o Modified and extended the behaviour of /c. Previously, it converted attribute values to lowercase, only where the value was entirely uppercase. Now it can take one of 3 values to do the following: l Change the value to entirely lowercase m Mixed - change the first letter of each word to uppercase, the rest to lowercase u Change the value to entirely uppercase Note that /c will make changes now regardless of the case of the existing value(s). o Modified to allow more attributes to be set and to allow synonyms for some attribute names. The synonyms are typically field names used by netadmin or nwadmin. They are: Attribute name Synonym CN Login name Other name Surname Last name OU Department SA Street address Physical Delivery Ofice Name City S State Province L Locality Location Additional attributes which can be set include 'Facsimile Telephone Number', 'Language', and 'EMail Address'. The 'EMail Address' attribute can contain both addresses and aliases. Use /a="EMail Alias" to set an alias. Some flexibility has been provided in specifying attribute or synonyms. Specifically, 'faximile' and facsimile' may be used, 'post' and 'postal' may be used, and both 'email address' and 'email alias' may be preceded by 'foreign'. The behaviour of setname when dealing with common names needs explanation. 'CN', 'Login name' and 'Other names' can be used interchangeably, although in nwadmin/netadmin 'Login name is used to display the first common name and 'Other names' is used to display the 2nd and subsequent common names. If you specify 'Other names' setname will add the value given, but will attempt to replace the value if 'CN' or 'Login name' is used without /v. It appears the first common name cannot be deleted or replaced so any such attempt will fail. Setowner o Changed /x to /a. /x (now /a) previously allowed setting the ownership of only those files without owners. The reason for the change was to reallocate /x for consistency with other programs. o Added (new) /x to allow searching of subcontainers. o Fixed a problem where it would sometimes report "Insufficient space or invalid owner" in NDS mode when the directory had been retrieved from a user's "Home Directory" attribute and was on a different file server from that to which the current drive was mapped. Setquota o Modified it to allow setting of quotas on the directory used by the NDS aware version of Pegasus Mail. This is the PMAIL subdirectory of the user's home directory. The home directory is obtained from the bindery HOME_DIR property or the NDS "Home "Directory" attribute. Use /m=n to set quotas on these directories. o Added /x to allow processing users in subcontainers of the specified container when is an NDS object. o Fixed a problem in NDS mode where /h worked correctly only when the home directory was on SYS. Setrest o Fixed a problem when manipulating station restrictions under 2.x and 3.x when more than 12 station restrictions existed. o Found that under NW 4.x, when manipulating station restrictions in bindery mode, NetWare may sometimes (its not consistent) return only the first 12 station restrictions when more than 12 exist. The new restriction must be added to the end of the list, hence the need to retrieve the existing restrictions. Setrest will now give an error and exit under NW 4.x when it finds 12 or more station restrictions exist. In this situation, station restrictions should be modified using setrest in NDS mode. o Fixed a problem in NDS mode where when setting "user can change password" to 'no', it was removing the attribute. This is normal behaviour for a boolean attribute as the absence of the attribute is usually equivalent to a value of 'false'. However, for this particular attribute, the absence of the attribute is treated as the equivalent of a value of 'true' by netadmin/nwadmin. o Modified to allow dates given as 'today', 'tomorrow' and 'yesterday' to be followed by a signed integer representing an adjustment in days e.g. "tod-30". Trstlist o Fixed a problem where '$', '#' and '&' prefixing a user or group name were being ignored in NDS mode. o Fixed a problem where garbage characters appeared in the output when combining /d, /s and /z. o Added /x to allow searching of subcontainers. o Added /n to allow displaying of only those files and/or directories without trustees. /n is ignored when is an object. Usergrps o Added /n=a to allow the groups to be listed one per line. The username is displayed on only the first line. o Added /n=b to force '[None]' to be output when the user does not belong to any groups. This may be helpful when the output from usergrps is being used as input to another program or is being processed in some way. o Added /n=c to allow groups to be displayed one per line with the username being displayed on each line. o Changed /x (used for excluding groups from the output) to /z. o Added (new) /x to allow searching of subcontainers Users o When using /u to show user connections only on a NW 4.x server, it was also showing file server connections. o Users was not converting addresses from LOCATION.SRT to uppercase when reading the file. Consequently a file containing lowercase ethernet addresses did not work. o Added /f=b to show the connection status (attached, licensed, unlicensed) under NW 4.x. This option requires console operator status. o Modified to show the number of licensed connections in the totals under NW 4.x when the user running it has supervisory rights to the server, or is a console operator. Vol_info o Added the following new options /a Shows volume attributes (suballocation, compression etc) plus the name spaces loaded under NW 4.x. /b Shows usage information by blocks under NW 3.x and 4.x. /d Shows directory entry information under NW 3. and 4.x. /s Shows usage information in MB under NW 3.x and 4.x. These options may be combined to produce multiple summaries in one invocation. o Modified the standard output to show the percentage of the volume used by directory entries. Whodidit o Whodidit was failing to accept /w as a valid option. o Added more fields which can be displayed. The following new values may now be assigned to /o: e Indicate if the file has extended attributes f Display the resource fork size for Mac files i Display the inherited rights mask j Display the owning name space m Display the file's search mode (applicable to .exe files only) q Display the quota for directories t Display the total size of the file (data + resource fork) w Display the mac name x Display the nfs name y Display the long name z Display the ftam name o Modified /o to allow specification of field widths o Added /c to control how much space is allowed for the path or file name. o Added filtering so that output can be limited by selecting values for any of the fields which can be displayed e.g. it is possible to list all files on a volume owned by the Mac name space. o Added the ability to use a template file to format the output. The file can contain one or more lines of text and substitution identifiers representing informational items, the volume, path or file name, or any combination of these in any name space. This allows commands to be built for files or directories matching some filter criteria. For example, whodidit could scan a volume for files not accessed during the last 6 months and via the template file, a batch file could be created to copy these to some other location and then delete them.