Board logo

标题: [文本处理] [已解决]批处理如何将字符串形式的数字转换为数值 [打印本页]

作者: lonron    时间: 2023-2-3 17:22     标题: [已解决]批处理如何将字符串形式的数字转换为数值

  1. @echo off
  2. 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 大或等于可用空间
  3. pause >nul 2>nul
复制代码
提取指定盘符的剩余空间(?字符串数字?)和 test.txt里提供的数字(?字符串数字?)做比较。显然我这段并不能正确比较结果。如果用set /a转换的话如何写在这一条命令里,还有没有别的方式转换。
作者: hfxiang    时间: 2023-2-3 18:26

  1. @echo off
  2. @rem 保存为ANSI格式
  3. setlocal enabledelayedexpansion
  4. for /f "tokens=3" %%a in ('dir "%UserProfile%\Desktop" ^| find "可用字节"') do (
  5. set A=%%a
  6. set A=!A:,=!
  7. echo;!A!
  8. for /f "tokens=*" %%b in ('type test.txt') do (
  9. if !A! lss %%b (
  10. echo;小于可用空间
  11. ) else (
  12. echo;大或等于可用空间
  13. )
  14. )
  15. )
  16. endlocal
复制代码

作者: 77七    时间: 2023-2-3 18:43

本帖最后由 77七 于 2023-2-3 19:12 编辑
  1. @echo off
  2. for /f "tokens=2 delims=录可" %%a in ('dir "%UserProfile%\Desktop" ^| find "可用字节"') do (
  3.         set "spaceB=%%a"
  4.         setlocal enabledelayedexpansion
  5.         set "spaceB=!spaceB:,=!"
  6.         set /p spaceTxt=<"test.txt"
  7.         if !spaceB! geq !spaceTxt! (
  8.                 echo 实际:!spaceB!  文本:!spaceTxt!
  9.                 echo 实际 大于等于 文本
  10.         ) else (
  11.                 echo 实际:!spaceB!  文本:!spaceTxt!
  12.                 echo 实际 小于 文本
  13.         )
  14.         endlocal
  15. )
  16. 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

这里数值比较的话会出错的 最好字符比较
  1. @echo off
  2. set /pd=<test.txt
  3. for /f "tokens=3" %%c in ('dir /-c "%UserProfile%\Desktop" ^| find "可用字节"') do if %%c lss !d! (echo 小于可用空间) else echo 大或等于可用空间
  4. 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 编辑
  1. @echo off
  2. for /f "tokens=3" %%i in ('dir /a /-C "%UserProfile%\Desktop"') do set "FreeSpace=00000000000000000000%%i"
  3. set /p Input=<Test.txt
  4. set "Input=000000000000000000000%Input%"
  5. if "%Input:~-20%" LEQ "%FreeSpace:~-20%" (
  6.     echo;小于或等于可用空间
  7. ) else (
  8.     echo;大于可用空间
  9. )
  10. 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