Упражнение 2. Создание производительного командного файла

Этот пример демонстрирует одновременный экспорт файлов DWG из разных папок. В нем используется расширенный командный файл, который обнаруживает и регистрирует ошибки.

При каждом выполнении командный файл получает три параметра:

Использование файла журнала

В файл журнала записывается все содержимое командного окна для каждого файла DWG. Используется команда AutoCAD copyhist, которая перемещает историю командного окна в системный буфер обмена. В этом примере для вставки истории в файл журнала используется приложение winclip.exe, бесплатный инструмент с открытым исходным кодом.

Использование внешнего командного файла

Командный файл можно вызвать из "внешнего" командного файла, то есть из главного командного файла, который содержит только вызовы подчиненных командных файлов, предоставляющих рассматриваемые параметры.

Предположим, что имеются чертежи для трех городов. Если пакетная операция экспортирует папку чертежей для одного города, внешний командный файл может иметь следующее содержание:

batchexport Redding\DWGs Redding\SDFs Redding\DefExport.epf
batchexport Spokane\DWGs Spokane\SDFs Spokane\DefExport.epf
batchexport Dubuque\DWGs Dubuque\SDFs Dubuque\DefExport.epf
Прим.:

Чтобы использовать этот метод, необходимо указать отдельный файл export.log для каждого вызова или переместить строку if exist export.log del export.log во внешний командный файл. В противном случае очередной вызов перезаписывает предыдущий журнал.

Образец производительного командного файла

Ниже приводится пример производительного командного файла с именем batchexport.bat. Создайте его в Блокноте, как при выполнении предыдущих примеров.

@echo off
setlocal
rem Get and verify the command parameters
set srcDir=%1
set outDir=%2
set defEpf=%3
if '%srcDir%' == '' goto usage
if '%outDir%' == '' goto usage
if '%defEpf%' == '' goto usage
if not exist %srcDir% (
echo Source Directory "%srcDir%" not found.
goto done
)
if not exist %srcDir%\*.dwg (
echo No DWG files found in "%srcDir%".
goto done
)
if not exist %outDir% (
echo Destination Directory "%outDir%" not found.
goto done
)
if not exist %defEpf% (echo Default Export Profile "%defEpf%" not found.
goto done
)
if exist export.log del export.log
rem Loop through the DWGs, exporting each
for %%f in (%srcDir%\*.dwg) do (
if exist %outDir%\%%~nf.sdf del %outDir%\%%~nf.sdf
echo. >> export.log
echo ******* EXPORTING %%f TO %outDir%\%%~nf.sdf ******* >> export.log
echo ******* EXPORTING %%f TO %outDir%\%%~nf.sdf *******
rem Create the Export Script ...
echo _-mapexport>     export.scr
echo FDO_SDF>>        export.scr
echo %outDir%\%%~nf.sdf>> export.scr
echo _yes>>             export.scr
if exist %%~df%%~pf%%~nf.epf (
rem Use a profile that has the same name as the DWG
echo %%~df%%~pf%%~nf.epf>> export.scr
) else (
rem Use the default profile 
echo %defEpf%>>  export.scr
)
echo _proceed>>             export.scr
echo _copyhist>>      export.scr
echo _quit>>          export.scr
"C:\Program Files\AutoCAD Map 3D 2009\acad.exe" %%f /nologo /b export.scr
winclip -p >> export.log
)
goto done
:usage
echo USAGE: %0 [sourceDir] [destDir] [defaultExportProfile]
echo example: %0 Redding\dwgs Redding\sdfs Redding\defExport.epf
:done

Этап работы

Мы создали расширенный командный файл с обнаружением ошибок и ведением журнала для одновременного экспорта файлов DWG из нескольких папок.