[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

  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转换的话如何写在这一条命令里,还有没有别的方式转换。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 11# lonron


    if后面比较的两个变量不加双引号的话,是数值比较,容易超出上限而出错;加上双引号,是字符串比较。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9# lonron
所以说要字符比较啊 这里的数值不能大于2147483647

TOP

回复 10# WHY


    这么多就你的结果测试成功了,但是为什么要对齐20个字符呢?有什么特别的门道

TOP

本帖最后由 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
复制代码
1

评分人数

TOP

回复 6# terse


   

好像还是不对啊这结果

TOP

回复 7# lonron


   没有,我是单纯的想到哪写哪了,我的估计是多了个空格,你用6楼大佬的就行了
bat小白,请多指教!谢谢!

TOP

回复 3# 77七


   

另外,"tokens=2 delims=录可" 为什么要这么截呢,因为我自己这边机子测试貌似只要tokens=3 就可以了,是不是有其他的容错考虑

TOP

这里数值比较的话会出错的 最好字符比较
  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
复制代码
1

评分人数

TOP

回复 3# 77七


    文本中实际用的就是默认的字节为单位,我这个不需要转换单位,只要用默认的能比较成功就可以了。

TOP

回复 2# hfxiang


    还是比较不了,是不是%%b提取出来也是文本形式啊

TOP

本帖最后由 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
复制代码
代码错误
bat小白,请多指教!谢谢!

TOP

  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
复制代码

TOP

返回列表