标题: [文本处理] [已解决]批处理如何将字符串形式的数字转换为数值 [打印本页]
作者: lonron 时间: 2023-2-3 17:22 标题: [已解决]批处理如何将字符串形式的数字转换为数值
- @echo off
- for /f "tokens=3" %%c in ('dir "%UserProfile%\Desktop" ^| find "可用字节"') do for /f "delims=, tokens=1-6" %%A in ('echo %%c') do for /f "delims=" %%x in (test.txt) do if %%x lss %%A%%B%%C%%D%%E%%F (echo 小于可用空间) else echo 大或等于可用空间
- pause >nul 2>nul
复制代码
提取指定盘符的剩余空间(?字符串数字?)和 test.txt里提供的数字(?字符串数字?)做比较。显然我这段并不能正确比较结果。如果用set /a转换的话如何写在这一条命令里,还有没有别的方式转换。
作者: hfxiang 时间: 2023-2-3 18:26
- @echo off
- @rem 保存为ANSI格式
- setlocal enabledelayedexpansion
- for /f "tokens=3" %%a in ('dir "%UserProfile%\Desktop" ^| find "可用字节"') do (
- set A=%%a
- set A=!A:,=!
- echo;!A!
- for /f "tokens=*" %%b in ('type test.txt') do (
- if !A! lss %%b (
- echo;小于可用空间
- ) else (
- echo;大或等于可用空间
- )
- )
- )
- endlocal
复制代码
作者: 77七 时间: 2023-2-3 18:43
本帖最后由 77七 于 2023-2-3 19:12 编辑
- @echo off
- for /f "tokens=2 delims=录可" %%a in ('dir "%UserProfile%\Desktop" ^| find "可用字节"') do (
- set "spaceB=%%a"
- setlocal enabledelayedexpansion
- set "spaceB=!spaceB:,=!"
- set /p spaceTxt=<"test.txt"
- if !spaceB! geq !spaceTxt! (
- echo 实际:!spaceB! 文本:!spaceTxt!
- echo 实际 大于等于 文本
- ) else (
- echo 实际:!spaceB! 文本:!spaceTxt!
- echo 实际 小于 文本
- )
- endlocal
- )
- pause >nul
复制代码
代码错误
作者: lonron 时间: 2023-2-3 18:49
回复 2# hfxiang
还是比较不了,是不是%%b提取出来也是文本形式啊
作者: lonron 时间: 2023-2-3 18:50
回复 3# 77七
文本中实际用的就是默认的字节为单位,我这个不需要转换单位,只要用默认的能比较成功就可以了。
作者: terse 时间: 2023-2-3 18:58
这里数值比较的话会出错的 最好字符比较- @echo off
- set /pd=<test.txt
- for /f "tokens=3" %%c in ('dir /-c "%UserProfile%\Desktop" ^| find "可用字节"') do if %%c lss !d! (echo 小于可用空间) else echo 大或等于可用空间
- pause
复制代码
作者: lonron 时间: 2023-2-3 19:00
回复 3# 77七
另外,"tokens=2 delims=录可" 为什么要这么截呢,因为我自己这边机子测试貌似只要tokens=3 就可以了,是不是有其他的容错考虑
作者: 77七 时间: 2023-2-3 19:04
回复 7# lonron
没有,我是单纯的想到哪写哪了,我的估计是多了个空格,你用6楼大佬的就行了
作者: lonron 时间: 2023-2-3 19:10
回复 6# terse
好像还是不对啊这结果
作者: WHY 时间: 2023-2-3 19:21
本帖最后由 WHY 于 2023-2-3 19:26 编辑
- @echo off
- for /f "tokens=3" %%i in ('dir /a /-C "%UserProfile%\Desktop"') do set "FreeSpace=00000000000000000000%%i"
- set /p Input=<Test.txt
- set "Input=000000000000000000000%Input%"
- if "%Input:~-20%" LEQ "%FreeSpace:~-20%" (
- echo;小于或等于可用空间
- ) else (
- echo;大于可用空间
- )
- pause
复制代码
作者: lonron 时间: 2023-2-3 19:26
回复 10# WHY
这么多就你的结果测试成功了,但是为什么要对齐20个字符呢?有什么特别的门道
作者: terse 时间: 2023-2-3 19:28
回复 9# lonron
所以说要字符比较啊 这里的数值不能大于2147483647
作者: Batcher 时间: 2023-2-4 09:07
回复 11# lonron
if后面比较的两个变量不加双引号的话,是数值比较,容易超出上限而出错;加上双引号,是字符串比较。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |