仅显示提到的第一种颜色的批处理文件

问题描述 投票:0回答:1

我制作了这个脚本,该脚本应该根据C驱动器具有多少空间来更改文本的颜色。但这只会更改为提到的颜色。例如,如果我把:红色接着:Blue,它只会变成红色而忽略蓝色部分。这是我的脚本的代码。如果可以的话,请让我知道如何解决。

@echo off
title Disk Space Calculator


:Welcome
echo Welcome to the Disk Space Calculator (DSC)! This program will change colour depending on disk space. For example...
echo 2TB - 1TB Cyan
echo 1TB - 750GB Blue
echo 750GB - 500GB Green
echo 500GB - 250GB  Yellow
echo 250GB - 100GB Orange
echo 100GB or less Red
echo This program is recommended for disk with 2TB or less.
echo Please not that available space will be measured in bytes.
pause
goto Calculation

:Calculation
cls
FOR /F "tokens=3 USEBACKQ" %%F IN (`dir /-c /w C:`) DO set "size=%%F"
echo Your disk has %size% bytes of space
if %size%=="2199023255552" goto Cyan
if %size%=="1099511627776" goto Blue
if %size%=="805306368000" goto Green
if %size%=="536870912000" goto Yellow
if %size%=="268435456000" goto Orange
if %size%=="107374182400" goto Red

:Cyan
color b
pause
exit

:Blue
color 1
pause
exit

:Green
color a
pause
exit

:Yellow
color e 
pause
exit

:Orange
color 6
pause 
exit

:Red
color 4
pause
exit
batch-file colors goto
1个回答
0
投票

如Compo所述,您针对常数的所有尺寸测试都不匹配,因此控制流不会分支到您定义的任何“颜色跳跃点”。控制流只是继续执行您给定示例中下面:Cyan节中的下一条语句。然后应用该颜色,并在Cyan节的exit语句处停止执行。通常,在许多比较的行之后放置“默认分支”,以避免控制流传递到脚本的不需要的部分。

示例片段:

[...]
if %size%=="536870912000" goto Yellow
if %size%=="268435456000" goto Orange
if %size%=="107374182400" goto Red
goto nomatch

:nomatch
echo Your drive size did not match any of the known constants.
pause
exit

:Cyan
[...]

您经常会在[nomatch]部分中根据需要打印一些有关脚本用法或版权和版本信息的帮助。

您的项目不是最容易用批处理脚本实现的项目。不幸的是,批处理脚本仅限于整数运算。这意味着,您可以在整数比较中处理的最大数字是2 ^ 32(一个整数具有32位),比40亿短(正好是4,294,967,296)。如果字节数超过了40亿个限制,则尝试以代表单个字节的数字来比较千兆字节和千兆字节的驱动器大小将始终导致错误消息:检查批处理文件中较大驱动器大小的唯一方法是获取兆字节或千兆字节规模的值。即使是2TB的驱动器,也只能“拥有” 2000 GB,这在40亿的范围内。做兆字节将是2,000,000 MB,这也可以正常工作,并且给出的数字会更准确一些,但不能减少到最后一个字节。

现在,要将长数字“重新计算”为较短的千兆字节值,您需要使用String操作。这个想法是2TB字节(= 2199023255552)可以缩短最后9位,结果大约为GB,在这种情况下,结果为2199 GB。

要切掉最后一位的数字,请参考以下原则:%variablename:~X,Y%,该信息记录在set的帮助中(在cmd.exe窗口中键入set /?以查看文档)。所提到的语法允许从起始位置X切割长度为Y个字符(或与此相关的数字)的字符串。方便地,您还可以指定负数长度,这表示“到最后但Y个字符”。因此,您将使用set size_gb=%size:~0,-9%之类的格式来减小String的大小。如果您的数字小于1 GB,则结果将是一个空字符串,因为您实际上切除了每个数字。

有了这些知识,您可以建立起类似的东西

if not "%size:~0,-9%" == "" (
  set size_gb=%size:~0,-9%
  echo Size in GB is: %size_gb%
)

‬希望您可以自己从那里开始使用脚本。祝您好运,并在您的项目中学习和体验新事物带来很多乐趣:)

顺便说一句:还要在命令行上查看if /?,以阅读有关比较的文档。您可能要比较“大于”逻辑(GTR,> =)而不是“等于”(EQU,==)的大小。

© www.soinside.com 2019 - 2024. All rights reserved.