无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: nttwqz
打印 上一主题 下一主题

[原创] dpinfo 2.6.5 beta2 磁盘分区信息 分区相关工具定制脚本

    [复制链接]
1#
发表于 2018-6-15 23:54:53 | 显示全部楼层
回复

使用道具 举报

2#
发表于 2018-6-15 23:59:08 | 显示全部楼层
本帖最后由 pznpt 于 2018-6-16 00:01 编辑
nttwqz 发表于 2018-6-14 23:58
set /a 判断纯数字漏洞太多,你不妨试试 “5i” “5 i” 这样的情况,我尝试了一番之后才使用这个“比较 ...


eol^= 在这里应该是多余的。
在 %你的字符串% 前后加上一个 # 字符,一是防止 %你的字符串% 为空值而使得 do 语句不被执行,二是防止 %你的字符串% 出现以 ; 字符开头而使得 do 语句不被执行。

一般 for /f 写成这样子:
for /f "tokens=1* eol= delims=1234567890" %%a in ("%你的字符串%") do (...)
这样子貌似会忽略以空格开头的行,就是说 %你的字符串% 以空格开头,do 语句不会被执行。

我觉得改成这样可能会更好一点(输入双引号不会闪退):
@echo off
set /p str=输入数字:
for /f "tokens=1* delims=1234567890" %%a in ("#%str:"=""%#") do (
    if "%%b" == "#" (echo 纯数字) else (echo 非纯数字或空值)
)

点评

直接set /a 赋值,把反馈>nul,用errorlevel做判断,不成功就赋值成0 ,就完事儿了。 字符串合理的自然赋值成功,不合理的自然失败。  详情 回复 发表于 2018-6-16 06:56

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

3#
发表于 2018-6-16 09:51:51 | 显示全部楼层
dos时代菜鸟 发表于 2018-6-16 06:56
直接set /a 赋值,把反馈>nul,用errorlevel做判断,不成功就赋值成0 ,就完事儿了。
字符串合理的自然 ...

楼主好像是判断输入字符串是否为纯数字(digit),而不是判断是否为合法的数(number)。

-2, 0x3c, 3.14, 1.24560000e+005 这些都是合法的数,并不代表这些数就是纯数字。因为这些字符串里面含有非0-9字符。

set /a 100*2
虽然 ErrorLevel 为 0,但 100*2 这个字符串并不是纯数字

set /a 086
同样,虽然 ErrorLevel 为 1,但 086 这个字符串是纯数字

点评

他是要通过用户输入的数字参与下一步判断数字大小是否在范围内,比较大下这事儿,要求变量是数字。  详情 回复 发表于 2018-6-16 10:07
好多年不见了,老兄还是一如既往地严谨啊!  详情 回复 发表于 2018-6-16 10:06
回复

使用道具 举报

4#
发表于 2018-6-16 10:54:04 | 显示全部楼层
527104427 发表于 2018-6-16 10:06
好多年不见了,老兄还是一如既往地严谨啊!

呵呵,N久不逛论坛了,昨天想下载一个工具,就登陆了,顺便就回了一贴。

无忧还是老样子,向无忧的新老朋友问声好!
回复

使用道具 举报

5#
发表于 2018-6-16 10:55:19 | 显示全部楼层
dos时代菜鸟 发表于 2018-6-16 10:07
他是要通过用户输入的数字参与下一步判断数字大小是否在范围内,比较大下这事儿,要求变量是数字。

嗯,可能是我理解错了吧。

点评

如果选项有1-10,那么除了1、2、3、4、5、6、7、8、9、10之外的都不合法,我需要这么判断。  详情 回复 发表于 2018-6-16 23:26
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-3 22:38

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表