
批處理讀取本機分辨率判斷執行nconvert的困惑最后由 kensami727 于 -10-4 01:50我需要nconvert合成圖片,然后有幾種分辨率,nconvert坐標不一樣,所以我就想著比較機器號數字,或者抓取系統分辨率來goto。set bz1=bz1x.jpgset bz2=bz2x.jpgfor /f delims= %%i in ('wmic DesktopMonitor get ScreenWidth^,ScreenHeight /value ^| findstr =') do set %%iif %ScreenWidth% leq 1920 (goto pc1k) else (goto pc2k):pc1knconvert----------%bz1%:pc2knconvert----------%bz2%if exist xxx.jpg (goto wallpaper) else (goto err)問題已經解決,我了一下,方便以后有同樣問題的朋友理解。我遇到兩個問題。問題一、分辨率沒有獲取到,造成后續的if leq之類比較不成功,不知道是特殊字符還是win10的原因,后來換成Win32_VideoController在win10下是可以獲取的,但Win32_VideoController獲取的并不是當前設置的分辨率,如果2k當1080用,還是會出問題,而DesktopMonitor在win10獲取的是空值。管理員提示我處理特殊字符,但我是新手始終搞不定。問題二、總是依次執行:pc1k和:pc2k,本來if就不成功,現在更加廢了。使用了很多方法,我甚至是for set version來判斷系統內核,再使用if DesktopMonitor和Win32_VideoController雙條件來獲取分辨率。但因為win32讀的是顯示器的分辨率,最終還是放棄。關于重復執行的問題,按2樓大佬提醒,我沒有成功,因為合成后后續還有其它命令需要執行,這時候goto :eof,合成完圖片批處理就直接終止了。干脆把pc2k的nconvert 切到另外一個批處理解決,這時候又被管理員提醒了一次。再次翻閱goto :eof,把goto換成了call,然后在pc1k和pc2k段下加goto :eof,讓命令能夠返回執行下一段powershell,最終解決代碼如下:for /f tokens=1-2 delims= %%a in ('mshta VBscript:Execute(CreateObject(scripting.Filesystemobject).GetStandardStream(1).Write(screen.width& &screen.height)^)(close^)') do (set fbl=%%a)if %fbl% leq 1920 (call :pc1k) else (call :pc2k)

