0

除了基础知识之外,我对使用批处理文件还很陌生。我正在尝试查看是否可以同时运行 2 个不同的循环以在 ogr2ogr 中导出我的导出(postresql 到 geopackage、geojson 等)。

我没有问题弄清楚 1 个循环。

For %%x IN (a,b,c) DO ogr2ogr -f "gpkg" C:\results\%%x_1.gpkg PG:"host=localhost
user=user1 dbname=testdb password=admin" -sql "SELECT * FROM %%x  WHERE columnx = '1'"

我试图弄清楚是否可以在其中循环通过我的选择查询中的 columnx 的另一个循环。即(1,2,3)。所以我上面的例子可以生成 9 个地理包 a_1、a_2、a_3、b_1、b_2、b_3、c_1、c_2、c_3。

可能是这样的,但当然它不起作用。

For %%x IN (a,b,c) & FOR %%y IN (1,2,3) DO ogr2ogr -f "gpkg" C:\results\%%x_1.gpkg 
PG:"host=localhost user=user1 dbname=testdb password=admin" -sql "SELECT * 
FROM %%x  WHERE columnx = '%%y'"

不确定这是否可能?任何建议都会很棒。

4

1 回答 1

1

&符号是在前一个命令完成后运行命令的机制。FOR命令总是需要相应的DO. 这在命令的帮助语法用法中非常清楚。

从理论上讲,您可以将所有这些代码放在一行中,但这会使其非常不可读,因此最好使用括号来创建命令块,就像您在之前的批处理文件问题中显示的那样。

For %%x IN (a,b,c) DO (
    FOR %%y IN (1,2,3) DO (
        ogr2ogr -f "gpkg" C:\results\%%x_1.gpkg PG:"host=localhost user=user1 dbname=testdb password=admin" -sql "SELECT * FROM %%x  WHERE columnx = '%%y'"
    )
)
于 2020-11-20T04:36:17.157 回答