2015-11-20 52 views
0

所以這裏的問題,這一塊的代碼工作正常,當我單獨運行它:Win7的CMD:For循環獨立工作,而不是在一個批處理

for /f "tokens=1,2 delims==" %%G in ('wmic desktopmonitor get screenheight^,screenwidth /value ^| find "="') do (
    if "%%G"=="ScreenHeight" set /a ResJ=%%H 
    if "%%G"=="ScreenWidth" set /a ResI=%%H 
) 
echo Your screen width is %ResI% 
echo Your screen height is %ResJ% 
pause 

然而,當我將其插入到這個劇本我我工作的,變量保持空白:

if errorlevel 1 (
    cd base 
    if exist %GameConfig% (
     gzdoom -config %GameConfig% -file %LevelA% %LevelB% %AddonA% %AddonB% %Patch% %HudA% %HudB% %HudC% %Music% -iwad %iWAD% 
    ) else (
     for /f "tokens=1,2 delims==" %%G in ('wmic desktopmonitor get screenheight^,screenwidth /value ^| find "="') do (
      if "%%G"=="ScreenHeight" set /a ResJ=%%H 
      if "%%G"=="ScreenWidth" set /a ResI=%%H 
     ) 
     echo Your screen width is %ResI% 
     echo Your screen height is %ResJ% 
     pause 
     gzdoom -config %GameConfig% -width %ResI% -height %ResJ% -file %LevelA% %LevelB% %AddonA% %AddonB% %Patch% %HudA% %HudB% %HudC% %Music% -iwad %iWAD% 
    ) 
) 

回答

1

你訪問一個()塊,這意味着,即使他們在代碼進一步下跌引用但所設置的值之前,整個街區被評爲中的變量。

  • 解決方案1:移動相關的代碼內環路,並使用循環變量

    您也可以通過在一行中列出的值,並通過正則表達式[0-9]得到它簡化代碼。

    for /f "tokens=1,2" %%a in (' 
        wmic desktopmonitor get screenheight^,screenwidth ^| findstr /r "[0-9]" 
    ') do (
        gzdoom -config %GameConfig% -width %%b -height %%a .............. 
    ) 
    
  • 解決方案2:不使用外()塊,使用goto

    if errorlevel 1 (
        if exist %GameConfig% (...... & goto done) else goto launch 
    ) 
    :launch 
        for /f "tokens=1,2" %%a in (' 
         wmic desktopmonitor get screenheight^,screenwidth ^| findstr /r "[0-9]" 
        ') do set /a ResJ=%%a, ResI=%%b 
        gzdoom -config %GameConfig% -width %ResI% -height %ResJ% ........ 
    :done 
        exit /b 
    
  • 解決方案3:使用延遲擴展:

    setlocal enableDelayedExpansion 
    gzdoom -config %GameConfig% -width !ResI! -height !ResJ! ........ 
    endlocal 
    
+0

這些都是非常好的解決方案,但RegExp解決方案不適合我的需求,因爲我不希望應用程序繼續o一旦設置了分辨率設置,就會強制以桌面分辨率啓動。我的解決方案就是簡單地將代碼位移到選擇分支之前,以便變量在需要時已經準備就緒。這就是結果代碼的樣子:http://pastebin.com/Kzx9NKR9 –