作爲其他的答案中所提到的,問題是由嵌套括號引起的。
而是避免他們,你也可以通過前^
字符逃脫他們 - 這工作:
IF EXIST MyFile.txt (ECHO Some^(More^)Potatoes)
沒有插入符^
這裏,命令行解釋採取第一)
關閉第一(
。
然而,應用上述逃逸技術原來的問題的代碼避免了錯誤信息,但不不結果在工作腳本,即使內SET
由SET /a
取代(如由所提到@KenWhite),因爲你需要建立delayed environment variable expansion;否則,顯示的pauseTime
值始終是最初的一個,10
。下面的修復工作:
@ECHO OFF
SET pauseTime=10
SET maxval=20
SET minval=5
SETLOCAL EnableDelayedExpansion
FOR /f %%j in (search1.txt) DO (
SET /a pauseTime=!RANDOM!*^(maxval-minval+1^)/32768+minval
ECHO.!pauseTime!
TIMEOUT !pauseTime!
ECHO.%%j
)
ENDLOCAL
這裏,SETLOCAL
聲明使FOR
命令執行前的延遲擴展。在FOR
循環體,%pauseTime%
和%RANDOM%
分別由!pauseTime!
和!RANDOM!
,取代;那些變量會受到延遲擴展的影響(因爲包含了!!
),這意味着在解析整個FOR
命令時,它們不會(像往常一樣)立即擴展,但執行時會立即擴展。爲便於清晰起見,我除去從其它變量%%
在SET /a
命令由於當/a
開關是本它們不是必需的(注意,也支持一個操作者%
!!)。
注:此腳本運行後,pauseTime
被複位到初始值10
作爲SETLOCAL
/ENDLOCAL
塊構成新的局部環境的命名空間;如果您需要最後一個值,請將ENDLOCAL
替換爲ENDLOCAL & SET pauseTime=%pauseTime%
;這個使用標準的立即擴大...
然而,由於minval
和maxval
是在腳本中的常量是最聰明的一次僅做FOR
計算maxval-minval+1
外,像@KenWhite建議。
按照你的建議,我改變了我的'SET pauseTime =%RANDOM%*(%MAXVAL% - %MINVAL%+ 1)/ 32768 +%MINVAL%'到'SET/A pauseTime =%RANDOM%*(% MAXVAL% - %MINVAL%)/ 32768 +%MINVAL%'。現在運行該腳本給我:_C:\用戶\添\桌面> SET MINVAL = 5 /32768 + 5在此time._ – 2015-02-24 18:52:20
代'意想不到%MAXVAL%'和'%MINVAL%'表達式使用其數值擺脫錯誤...所以我想這個問題必須與一些擴展百分比的屬性? – 2015-02-24 19:03:29
我明白了。它是嵌套的括號對。我將編輯以包含修復程序。 – 2015-02-24 19:27:49