Пакетное извлечение из нескольких файлов .db - PullRequest
0 голосов
/ 13 июня 2019

У меня много .db файлов sqlite3.Файлы находятся в отдельных подпапках, и большинство из них имеют одинаковые имена файлов: 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.Я надеюсь, что объяснение понятно.Есть идеи как это исправить?

1 Ответ

3 голосов
/ 13 июня 2019

Вы перенаправляете вывод в %%~nG, который является базовым именем из-за модификатора ~n. Чтобы получить также полный путь к родительскому каталогу, используйте также ~d и ~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, чтобы также на всякий случай заменить привод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...