是否可以将系统变量传递给批处理文件中的ogr2ogr

时间:2014-05-07 14:50:02

标签: batch-file gdal ogr

我的组织使用批处理文件对我们的数据库执行查询,并且我遇到了一种情况,我需要执行一个太大而无法一次执行的查询。所以我所做的是修改批处理文件以循环遍历文本文件并单独查询每一行并将结果附加到输出文件。

问题是,当我回显查询变量时,它完全按预期读取,但是当我将它传递给ogr代替sql字符串时,它似乎是空白的。我不确定我做错了什么,或者我想做的事情是不可能的。谁能澄清这里发生了什么?

SET Path=\\my\path\blah\gdal\bin
SET GDAL_DATA=\\my\path\blah\gdal\data

@echo off
SET "file=C:\filepath.txt"
SET /A i=0

REM put file into array line by line
for /F "usebackq delims=" %%a in ("%file%") DO (
set /A i+=1
call set array[%%i%%]=%%a
call set n=%%i%%
)
REM Loop through array entries
for /L %%i in (1,1, %n%) DO (
REM Create SQL String
call set "queryStart="SELECT * FROM _tablename WHERE _fieldname IN ('"
call set uid=%%array[%%i]%%
call set "queryEnd=')""
call set call set "fullQuery=%%queryStart%%%%uid%%%%queryEnd%%"
REM Database Request
ogr2ogr -skipfailures -update -append -s_srs EPSG:4326 -t_srs EPSG:4326 -f "FileGDB" C:\blah\MyExport.gdb PG:"dbname=instagram host=hostservername user=username password=password" -sql %fullquery% -nln "LayerName" -nlt POINT --config FGDB_BULK_LOAD yes
)
pause;

1 个答案:

答案 0 :(得分:0)

SET Path=\\my\path\blah\gdal\bin;%PATH%
SET GDAL_DATA=\\my\path\blah\gdal\data

@echo off
    SET "file=C:\filepath.txt"
    SET /A i=0

    set "queryStart=SELECT * FROM _tablename WHERE _fieldname IN ^('"
    set "queryEnd='^)"

REM put file into array line by line
    for /F "usebackq delims=" %%a in ("%file%") DO (
        ogr2ogr -skipfailures -update -append -s_srs EPSG:4326 -t_srs EPSG:4326 ^
                -f "FileGDB" C:\blah\MyExport.gdb PG:"dbname=instagram host=hostservername user=username password=password" ^
                -sql  "%queryStart%%%a%queryEnd%" ^
                -nln "LayerName" -nlt POINT --config FGDB_BULK_LOAD yes
    )
  • 从路径中删除所有元素
  • 并不是一个好主意
  • 无需在每次迭代中定义查询的开始和结束
  • 您可能会遇到查询中的括号问题,将其转义
  • 不需要数组,因此直接读取文件并使用查询中的读取值。
  • 我已拆分线条以更好地阅读代码。我不知道ogr2ogr是否会抱怨

当然,并不需要进行所有更改,只是为了使其更具可读性。

而且,在所有这些之后,如果我必须下注,你的问题就在括号中。但我无法测试它。