我有一个小的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, 罗伯特答案 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=
会......?