首页 > 解决方案 > 从多个 .db 文件中批量提取

问题描述

我有很多.dbsqlite3 文件。文件位于单独的子文件夹中,其中大多数具有相同的文件名:base.db. 每个文件都包含一个表' main',我想从每个 .db 文件中提取表以分隔 csv 文件,以便将每个 csv 提取到 .db 文件旁边的同一子文件夹中。

我试过这个脚本

cd C:\sqlite-tools-win32-x86
for /R %%G in (*.db) do sqlite3 -csv -header "%%G" "select * from main" > %%~nG.csv

问题是,这个脚本正在.db从子文件夹中读取文件,但是在根文件夹中提取 csv,并且还覆盖了以前的 csv 文件。我希望解释清楚。知道如何解决吗?

标签: sqlitebatch-file

解决方案


您正在将输出重定向到%%~nG,这是由于~n修饰符的基本名称。要获取父目录的完整路径,还可以使用~dand~p

cd /D "C:\sqlite-tools-win32-x86"
for /R %%G in (*.db) do (
    sqlite3 -csv -header "%%~G" "select * from main" > "%%~dpnG.csv"
)

为了以防万一,我也更换cd了驱动器。cd /D


推荐阅读