Пакетное редактирование DBF

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Re: Пакетное редактирование DBF

Сообщение Slinger » 29 авг 2011, 15:45

Вопрос уже не по теме, однако поставил меня в тупик. Пишу (вернее дописал уже) батник для пакетной обработки огром всех шейпов, находящихся в папке. Вопроc: как с помощью дефолтного cmd-эшного бэйсика вернуть имя только текущей директории ? Причём именно не что-то вроде %~dp0, который возвращает полный путь вместе с диском, а именно текущий каталог. Например при запуске батника из директории D:\ArcGIS\work\1830-15, определённый код должен возвращать имя "1830-15".

Если штатными прямыми средствами не получится, возможно можно будет взять часть шейпа в качестве имени папки. Например 1830-15_06.shp - выражение "1830-15" общее для всех шейпов и оно еж является именем папки. Может быть возможно с помощью каких-то функций вернуть именно эту часть файла...

Если же всё же штатных средств cmd не найдётся, то если кто-то предложит какой-нибудь примитивный скрипт на vbs, то буду тоже благодарен.

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Пакетное редактирование DBF

Сообщение Александр Мурый » 29 авг 2011, 16:07

Что-то типа "echo %CURRENTDIR%", нет? Или "echo %CD%"
Редактор материалов, модератор форума

Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Re: Пакетное редактирование DBF

Сообщение Slinger » 29 авг 2011, 16:21

переменной currentdir нет вообще, а CD возвращает полный путь (диск + каталоги)

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Пакетное редактирование DBF

Сообщение Denis Rykov » 30 авг 2011, 11:25

В батнике можно написать так:

Код: Выделить всё

for %%A in ("%~dp0.") do echo %%~nA 
Spatial is now, more than ever, just another column- The Geometry Column.

Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Re: Пакетное редактирование DBF

Сообщение Slinger » 30 авг 2011, 12:07

Спасибо, но это имя файла. А у меня стало быть надо вернуть или имя текущего каталога, или имя файла до знака "_".

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Пакетное редактирование DBF

Сообщение Denis Rykov » 30 авг 2011, 18:08

С чего вдруг это имя файла, вы пробовали запускать?
Spatial is now, more than ever, just another column- The Geometry Column.

Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Re: Пакетное редактирование DBF

Сообщение Slinger » 30 авг 2011, 20:14

Ох, прошу прощения, увидев "%%~n", решил, что возвращается имя файла. А сейчас проверил - действительно возвращает имя папки запуска батника. Спасибо!

Однако, возник другой вопрос. Как подобное вывести не через цикл? То есть мне необходимо вывести имя текущего каталога (которое является одновременно частью файла, шейпа) и использовать его при указании исходного шейпа в ogr2ogr. Например имя исходного файла 1830-15_06.shp. Выражение "1830-15" является именем каталога и может быть возвращено через цикл. А каким образом его прописать в синтаксисе ?

По идее мне необходимо "отловить" результаты команды эхо (echo) и занести его в переменную через set. А дальше использовать по назначению. Только как это сделать...

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Пакетное редактирование DBF

Сообщение Voltron » 30 авг 2011, 21:27

Вот и выросло поколение....

Код: Выделить всё

for %%* in (.) do set curr_dir= %%~n*

Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Re: Пакетное редактирование DBF

Сообщение Slinger » 30 авг 2011, 22:05

Зря вы так. Должность такая, что приходится заниматься и программированием, и землеустройством, и геодезией, ну и ГИС/САПР, конечно. С программингом знаком меньше всего, поэтому нюансы в синтаксисе бывают.

А за код спасибо, разобрался, всё работает.

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Пакетное редактирование DBF

Сообщение Александр Мурый » 30 авг 2011, 23:02

А я, в свою очередь, скажу Slinger'у спасибо за интересную тему. Лично я узнал OGR с новой стороны (а вот мануал по OGR SQL как раз не слишком помог).
Редактор материалов, модератор форума

Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Re: Пакетное редактирование DBF

Сообщение Slinger » 20 сен 2011, 12:27

Ну что же, я вернулся с очередной задачей 8) . Только что поступило задание от руководства, что получаемые посредством обработки через батник (ogr2ogr) файлы должны быть определённой даты (прошлый год :D ), в следствии чего возникли две задачи

1) Есть некая структура папок. Чаще всего это папка "arcgis", в которым лежат папки, соответствующие номенклатуре листа, например 1830-15, 2125-40 и прочие. И таких папок штук 30. В каждой из них лежат уже корректные шейпы, по штук 40 в каждой папке. Вопрос. Как можно пакетно изменить у всех файлов (не только .shp, но и .dbf/.shx) дату ? Разумеется, тот кто будет работать, ставит у себя на ПК соответствующую дату и правит файлы. Пока обхожусь всё тем же написанным батников, который необходимо закинуть в папку с именем номенклатуры, он обработает файлы и выдаст всё в папке output (которая создана в той же папке с именем номенклатуры). Вариант тоже прокатывает, ибо можно чуть-чуть подредактировать батник, скорректировать его, однако от первоначального кода никуда не деться - он работает только с шейпами в одной папке. Соответственно моя задача. Как можно изменить дату создания файлов пакетно в нескольких папках ? Какой для этого самый простой способ. Была мысль написать что-то элементарное, добавляющее допустим нулевой байт в конце каждого файла, а потом убирающая его, в следствии чего они изменятся на текущую дату. Однако ведь наверняка есть способ побыстрее

2) Вторая задача из той же оперы. К каждой папке с именем номенклатуры создана карта .mxd, у которой тоже необходимо исправтиь дату создания. Была мысль воспользоваться набором скриптов CS toolset, однако он не поддерживает обработку mxd файлов, находящихся в разных папках. То есть работает в пределах одной папки. Соответственно как можно решить задачу пакетной обновления mxd во всех указанных папках. Например, произвести операцию по указанию относительных путей к шейпам.

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Пакетное редактирование DBF

Сообщение ericsson » 20 сен 2011, 12:53


Slinger
Гуру
Сообщения: 879
Зарегистрирован: 17 июн 2010, 23:14
Репутация: 207
Откуда: Москва

Re: Пакетное редактирование DBF

Сообщение Slinger » 20 сен 2011, 14:10

Эх, столько всего расписал, а решение лежало на поверхности. Огромное спасибо!

UPD

Добавлю. Также можно изменить дату последнего редактирования через Total Commander. Необходимо выделить нужный файл/каталог и кликнуть Файлы-Изменить атрибуты. Там далее можно разобраться.

Хотя, конечно, у FileTouch гораздо больше возможностей.

Ответить

Вернуться в «Общие вопросы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя