“set / p myvar =< file.txt”不起作用 - 为什么?

时间:2011-10-31 12:39:15

标签: sqlite windows-7 batch-file 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%"
)

我希望CHECK设置为sqlite输出的结果。虽然“type”显示预期结果,但CHECK为空!

我不明白我做错了什么。

我也尝试过不使用tmpfile

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

但这也行不通......

我很感激任何帮助/提示。

提前Tnx, 罗伯特

2 个答案:

答案 0 :(得分: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 :(得分:0)

如果%%D.check不仅包含一行

然后set /p=会......?