我的组织使用批处理文件对我们的数据库执行查询,并且我遇到了一种情况,我需要执行一个太大而无法一次执行的查询。所以我所做的是修改批处理文件以循环遍历文本文件并单独查询每一行并将结果附加到输出文件。
问题是,当我回显查询变量时,它完全按预期读取,但是当我将它传递给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;
答案 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
)
当然,并不需要进行所有更改,只是为了使其更具可读性。
而且,在所有这些之后,如果我必须下注,你的问题就在括号中。但我无法测试它。