Пакетные файлы работают не так, как вы думаете.
В настоящее время вы думаете, что после строки sqlite3 "mydatabase.db"
вы находитесь в каком-то «режиме базы данных» и всех следующих строк в командном файле передаются процессу sqlite3.
Это не так.
Каждая строка в пакетном файле выполняется после завершения предыдущего подобного.
Строка sqlite3 "mydatabase.db"
запускает процесс sqlite3 ... а затем ожидает завершения этого процесса. Этого никогда не произойдет, если вы не сделаете это вручную, нажав клавишу.
И после этого cmd.exe попытается выполнить команду .backup backup_db.db
, но поскольку это не команда cmd.exe понимает, произойдет сбой с ошибкой ( ". backup 'не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл." ).
Что вы действительно хотите do - это создать файл сценария и передать его SQLite для обработки. Это можно сделать,
перенаправив файл в процесс sqlite3. Предположим, что create_backup.txt
содержит команды для создания резервной копии:
sqlite3 "mydatabase.db" < create_backup.txt
передача файла в процесс sqlite3, например, используя type
:
type create_backup.txt | sqlite3 "mydatabase.db"
в качестве альтернативы вы можете использовать echo
для вывода команды:
echo .backup backup_db.db | sqlite3 "mydatabase.db"
Очевидно, что метод echo
проще для однострочников, тогда как перенаправление ввода с помощью <
или записи Из файла с type
проще выполнять более сложные многострочные операции.
Другой вариант, который вы можете попробовать - использовать параметр -init
в sqlite3.exe
. См. Документацию по SQLite.