«set / p myvar = <file.txt» не работает - почему? - PullRequest
1 голос
/ 31 октября 2011

У меня есть небольшая партия для Win7, и мне интересно, как это сделать правильно. Вот что я делаю:

@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%"
)

Я ожидаю, что CHECK установлен на результат вывода sqlite. Хотя «type» показывает ожидаемый результат, CHECK пуст!

И я не понимаю, что я делаю неправильно.

Я тоже пробовал без использования tmpfile

FOR /F "tokens=*" %%i in ('sqlite3 %%D "pragma integrity_check;"') do SET CHECK=%%i

но это тоже не работает ...

Буду признателен за любую помощь / подсказку.

Tnx заранее, Роберт

Ответы [ 2 ]

1 голос
/ 31 октября 2011

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
0 голосов
/ 09 ноября 2011

, если %%D.check содержит не только одну строку

тогда set /p= будет ...?

...