#sqlite #windows-7 #batch-file #dos
#sqlite #windows-7 #пакетный файл #dos
Вопрос:
У меня есть небольшая партия Win7 dos, и мне интересно, как это сделать правильно. Вот что я делаю:
@echo OFF
@FOR %%D IN (*.sqlite) DO (
sqlite3 %%D "pragma integrity_check;" > %%D.check
type %%D.check
set /p CHECK= < %%D.check
del %%D.check
echo "%CHECK%"
)
Я бы ожидал, что для проверки установлен результат вывода sqlite. Хотя «тип» показывает ожидаемый результат, ПРОВЕРКА пуста!
И я не понимаю, что я делаю не так.
Я также пробовал это без использования tmpfile
FOR /F "tokens=*" %%i in ('sqlite3 %%D "pragma integrity_check;"') do SET CHECK=%%i
но это тоже не работает…
Я был бы признателен за любую помощь / подсказку.
Заранее спасибо, Роберт
Ответ №1:
Check
установлено правильное значение, но вы не можете его увидеть echo %check%
, поскольку эта строка расширяется при разборе полного FOR-блока, а не во время выполнения.
Вы можете перейти на отложенное расширение или простой вызов: подпрограмма.
@echo OFF
setlocal EnableDelayedExpansion
FOR %%D IN (*.sqlite) DO (
sqlite3 %%D "pragma integrity_check;" > %%D.check
type %%D.check
set /p CHECK= < %%D.check
del %%D.check
echo "!CHECK!"
)
или
@echo OFF
FOR %%D IN (*.sqlite) DO (
sqlite3 %%D "pragma integrity_check;" > %%D.check
type %%D.check
set /p CHECK= < %%D.check
del %%D.check
call :output
)
exit /b
:output
echo "%CHECK%"
exit /b
Комментарии:
1. Отлично! С EnableDelayedExpansion теперь все работает нормально. Tnx очень нравится!
Ответ №2:
если %%D.check
содержит не только одну строку
тогда set /p=
будет …?