2011-10-31 65 views
1

我有一個小的Win7批處理,我想知道如何做到這一點。我在做什麼:「set/p myvar = <file.txt」不起作用 - 爲什麼?

@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輸出的結果。儘管「類型」顯示了預期的結果,但CHECK是空的!

而我不明白我做錯了什麼。

我也試了一下,而無需使用TMPFILE

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

但是這也沒有工作...

我會很感激任何幫助/提示。

TNX提前, 羅伯特

回答

1

Check設置爲正確的值,但是你不能用echo %check%看到它,作爲解析完成塊,同時,在不執行時間這條線展開。
您可以更改爲延遲擴展或簡單調用:子例程。

@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

完美!使用EnableDelayedExpansion現在可以正常工作。 Tnx非常多! – Enkidu

0

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

那麼set /p=會...?

相關問題