for-loop - CMD 脚本:在“for”循环中未正确评估变量
问题描述
我制作了一个 cmd 脚本来获取 PC 中每个驱动器的可用空间,并在低于某个值(常量“MyLimit”)时发送警报。我发现在我的“for”循环(驱动器列表中的循环)中没有正确评估变量
这是“for”循环:
Set MyLimit=107374182400
for /f "tokens=1-3" %%a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"') do (
if not "%%c"=="" (
echo FreeSpace=%%a
echo Name=%%b
echo Size=%%c
if %%a LSS %MyLimit% (
Echo not enough free space in %%b
) else (
echo "do nothing"
)
)
)
但是变量%%a总是假定“for”循环的最后一个索引的值......那么 IF 总是失败......
错误在哪里?
谢谢你的支持
啤酒
我尝试了你的建议,见下文,但它仍然不起作用,也许我在代码中放了一些错误,我不太确定做得好:
@Echo off
SETLOCAL enabledelayedexpansion
Set GB100=107374182400
Set TB_10=10995116277760
Set MyLimit=%TB_10%
for /f "tokens=1-3" %%a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"') do (
if not "%%c"=="" (
echo FreeSpace=%%a
echo Name=%%b
echo Size=%%c
call :padNum %%a
call :padNum MyLimit
echo %%a
echo %MyLimit%
if "%%a" LSS "%MyLimit%" (
Echo not enough free space in %%b
) else (
echo "nothing"
)
)
)
:padNum
setlocal enableDelayedExpansion
set "n=000000000000000!%~1!"
set "n=!n:~-15!"
endlocal & set "%~1=%n%"
exit /b
我故意设置一个上限(10TB)来强制发送消息......
解决方案
只是代码中的一个小问题:元变量的%%a
行为不像 normal %environmentVariables%
,所以你不能像使用它们一样。
@Echo off
SETLOCAL enabledelayedexpansion
Set GB100=107374182400
Set TB_10=10995116277760
Set MyLimit=%TB_10%
for /f "tokens=1-3" %%a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"') do (
if not "%%c"=="" (
echo FreeSpace=%%a
echo Name=%%b
echo Size=%%c
set free=%%a
call :padNum free
call :padNum MyLimit
echo free= !free!
echo MyLimit= !MyLimit!
if "!free!" LSS "!MyLimit!" (
Echo not enough free space in %%b
) else (
echo "nothing"
)
)
)
goto :eof
:padNum
setlocal enableDelayedExpansion
set "n=000000000000000000!%~1!"
set "n=!n:~-18!"
endlocal & set "%~1=%n%"
exit /b
(我自由地从 15 个字符扩展到 18 个字符,所以在不久的将来,当磁盘变大时,你不会遇到麻烦。)
推荐阅读
- android - 每次我导航到新片段时都会分配内存
- spring-boot - Spring boot with lettuce:无法连接,事件执行器组被终止
- javascript - div 浮动不合适
- node.js - 无法让 docker-compose 网络工作
- css - 链接的自定义边框底部也显示在图像和导航上
- highcharts - 仪表图在 iPhone 上出现白色段
- python - 如何在不包含站点数据的情况下从网页中获取准确的标题
- python - python:对字典项目列表的字典列表的列表理解
- java - POST 中的 Spring Boot API Base64 编码错误
- javascript - 使用 Redux 操作获取数据但无法将数据设置为本地状态