- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从头开始,我使用命令提示符创建了一个安装程序(游戏安装程序)。我想为游戏上的可用图形内存设置一个变量当前正在运行的 PC ...类似这样 ---
set gfxmem=[code here]
if %gfxmem% leq 1000[mb or value] ( echo Low Graphics memory ) else echo Supported
什么可以代替这里的代码?
最佳答案
我搜索了万维网,很快找到了 How To Identify Your Computer Video Card (The Manual Way) 并下载了包含以下行的批处理文件:
@echo off
wmic PATH Win32_videocontroller GET description
wmic PATH Win32_videocontroller GET adapterram
wmic PATH Win32_videocontroller GET driverversion
wmic PATH Win32_videocontroller GET pnpdeviceid
pause
我执行了批处理文件来查看带有 adapterram
的行的输出,并且可以看到带有 AdapterRAM
的行和带有字节值的两行,因为有两个视频适配器安装在我的电脑上。
接下来,我使用 How to get the % of memory utilization using WMIC in batch script? 上的答案和批处理代码本身的注释中详细描述的编码技术开发了以下批处理代码。
@echo off
goto :GetVideoMemorySize
rem Note: MB = MiB and GB = GiB in this batch file, see
rem https://en.wikipedia.org/wiki/Byte for details on GiB.
rem The command WMIC with the parameters PATH Win32_videocontroller GET
rem AdapterRAM outputs one line per video adapter. The output of WMIC is
rem in UTF-16 LE with BOM. The output is redirected to a temporary file
rem which is printed by command TYPE to STDOUT which makes a better job
rem on UNICODE to ASCII conversion as command FOR.
rem Memory of a video adapter is in bytes which can be greater 2^31 (= 2 GB).
rem Windows command processor performs arithmetic operations always with
rem 32-bit signed integer. Therefore 2 GB or more installed video memory
rem exceeds the bit width of a 32-bit signed integer and arithmetic
rem calculations are wrong on 2 GB or more installed video memory. To
rem avoid the integer overflow, a subroutine is called which makes the
rem calculation depending on string value length, i.e. number of bits.
rem Create a copy of current environment variables. Enabling additionally
rem delayed environment variable expansion is not required for this task.
rem Command extensions are enabled by default, but nevertheless enable it.
:GetVideoMemorySize
setlocal EnableExtensions
set "VideoTotalMemory=0"
set "VideoAdapterCount=0"
%SystemRoot%\System32\wbem\wmic.exe PATH Win32_videocontroller GET AdapterRAM >"%TEMP%\AdapterRam.tmp"
for /F "skip=1" %%M in ('type "%TEMP%\AdapterRam.tmp"') do (
set /A VideoAdapterCount+=1
set "VideoAdapterMemory=%%M"
call :AddVideoMemory
)
del "%TEMP%\AdapterRam.tmp"
if "%VideoAdapterCount%" == "1" (
set "AdapterInfo="
) else (
set "AdapterInfo= of %VideoAdapterCount% video adapters"
)
echo Total video memory is: %VideoTotalMemory% MB%AdapterInfo%
echo.
if %VideoTotalMemory% LEQ 1024 (
echo Low Graphics memory
) else (
echo Supported
)
endlocal
goto :EOF
rem This subroutine calculates the total video adapter memory correct
rem only for video adapter memory sizes being either less than 1 GB or
rem an exact multiple of 1 GB. The calculation is wrong for values like
rem 1.5 GB, 2.5 GB and similar values.
rem For a value with not more than 9 characters the memory size in MB
rem can be directly calculated with a division by 1024 * 1024 = 1048576.
rem To avoid an integer overflow on video memory sizes of 1 GB and more,
rem the last 6 characters are removed from bytes value and the remaining
rem characters are divided by 1073 to get the number of GB which is next
rem multiplied with 1024 to get the value in MB.
rem 1 GB = 1.073.741.824 bytes = 2^30
rem 2 GB = 2.147.483.648 bytes = 2^31
rem 4 GB = 4.294.967.296 bytes = 2^32
rem 8 GB = 8.589.934.592 bytes = 2^33
rem 16 GB = 17.179.869.184 bytes = 2^34
rem 32 GB = 34.359.738.368 bytes = 2^35
:AddVideoMemory
if not "%VideoAdapterMemory:~9,1%" == "" goto AtLeast1GB
set /A VideoTotalMemory+=VideoAdapterMemory/1048576
goto :EOF
:AtLeast1GB
set "VideoAdapterMemory=%VideoAdapterMemory:~0,-6%"
set /A VideoTotalMemory+=(VideoAdapterMemory/1073)*1024
goto :EOF
我在具有管理员权限的 Windows XP SP3 x86 和 Windows 7 SP1 x64 上测试了批处理文件,它在两台计算机上都运行良好。
另请参见 User Account Control and WMI 和 Win32_VideoController class 。对我来说有趣的是第二个网页上的uint32 AdapterRAM
。这意味着视频适配器 RAM 不可能超过 4 GB。
为了了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
调用/?
删除/?
回显/?
endlocal/?
对于/?
转到/?
雷姆/?
setlocal/?
设置/?
输入/?
wmic/?
wmic 路径/?
wmic 路径 Win32_videocontroller GET/?
另请阅读 Microsoft 文章 Using command redirection operators,了解重定向运算符 >
的说明。
关于CMD 的图形内存信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38158066/
我正在尝试制作一个命令行界面程序,它可以从用户输入中获取代码行并使用 execlp 执行它们。 我想知道是否有更好的方法来编写我的代码。 execlp(cmd[0], cmd[0], cmd[1] c
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我使用此脚本查找当前文件夹及其 .bat 文件: for /f %%i in ("%0") do set curpath=%%~dpi echo %curpath% 如果路径包含空格,它无法正常工作
在 Windows 的命令提示符处,我可以通过键入 echo 来回显响铃字符,然后按住 Ctrl+G 生成 echo ^G,运行时会发出铃声。 当我实际用键盘输入 echo ^G 时,它只会在屏幕上打
这是我执行的命令: >cmd /k >echo 1 1 >echo 2 2 >echo 3 3 >exit /b >cmd /c "doskey /history" echo 1 echo 2 ech
我需要编写一个命令来更改当前目录并打印包含在一些标签中的 NEW 目录。我以为 cd SOMEPATH & echo wkd%cd%wkd会这样做,但有一个问题。 这是一些示例输入和输出 C:\Use
我正在尝试从“调用 ppm 查询断言”中捕获 stoutput,如果它等于“ * 没有安装匹配 'assert' ** 的软件包”或更好但包含字符串“无软件包”做“某事” “.. 正在安装软件包。任何
似乎一个cmd脚本包含: prog1 prog2 与...相同 call prog1 call prog2 使用CALL命令有什么意义? 最佳答案 当需要调用另一个批处理程序(cmd脚本)时,应使用c
我要打电话 cmd /c "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.com" mysolution.sln /b
在 Windows 上,可以轻松以管理员身份运行 cmd 应用程序: Right click on cmd icon >> run as administrator` 但我想以管理员身份使用 PhpS
我目前正在使用 Python 的 cmd 模块创建一个基于命令的游戏。 在某个时刻,我的 cmd.Cmd 对象会被嵌套。如果我说我正在运行命令提示符 A,那么在某个时刻,会在 A 内创建一个新的提示符
我正在尝试构建一个 cli 框架,其中需要动态添加命令。我想要实现的是 - 我将有一个继承自 cmd.Cmd 的最小类,稍后我将在单独的类中编写命令并将这些命令与主类一起加载。 以下是我尝试过的,但在
以下命令有什么区别: start %comspec% /c script.cmd start cmd /C script.cmd 我需要 script.cmd 的 cmd 窗口在 script.cmd
我正在尝试将一个长而复杂的 Windows 批处理文件转换为 Python。 除了细微的问题外一切正常,我怀疑这与引用有关,但不太清楚。 在批处理文件中,这工作正常: Reg.exe add "HKC
我想为 ffplay 或 ffmpeg 传递多个标题,它说我需要用 CRLF 拆分。在 linux 上我可以使用 \或 $'\r\n'但是 window 怎么样? SET CRLF=^ ffplay
我是 3D 软件 Blender 的用户。 我正在尝试在 CMD 中运行,因为 Blender 提供了 CLI 控制。 下面的代码工作正常。 blender -b "my.blend" ^ --pyt
我有一个包含版本资源的文件,其中填充了文件版本/产品版本字段。我需要通过 BAT 文件检索产品版本。例如,我在 bat 文件的输出中有 ProductVersion 1.0.1 的文件我不想有字符串“
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 去年关闭。 Improve this
我可以运行 forfiles 命令与cmd /c ,正如预期的那样 C:\>forfiles/c "cmd/c ping/a" 必须指定 IP 地址。 但是,如果我删除 cmd /c ,它不再识别任何
我有一个函数,它可以获取所有 USB 连接设备的信息。 connected_devices = :os.cmd('usb-devices | grep -A 1 Product=') 当我使用 :os
我是一名优秀的程序员,十分优秀!