找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24472|回复: 12

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

[复制链接]
发表于 2023-2-3 17:22:38 | 显示全部楼层 |阅读模式
  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转换的话如何写在这一条命令里,还有没有别的方式转换。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-2-3 18:26:28 | 显示全部楼层

  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
复制代码
发表于 2023-2-3 18:43:54 | 显示全部楼层
本帖最后由 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
复制代码
代码错误
 楼主| 发表于 2023-2-3 18:49:08 | 显示全部楼层
回复 2# hfxiang


    还是比较不了,是不是%%b提取出来也是文本形式啊
 楼主| 发表于 2023-2-3 18:50:51 | 显示全部楼层
回复 3# 77七


    文本中实际用的就是默认的字节为单位,我这个不需要转换单位,只要用默认的能比较成功就可以了。
发表于 2023-2-3 18:58:26 | 显示全部楼层
这里数值比较的话会出错的 最好字符比较
  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技术 +1 收起 理由
lonron + 1 感谢帮助

查看全部评分

 楼主| 发表于 2023-2-3 19:00:54 | 显示全部楼层
回复 3# 77七


   

另外,"tokens=2 delims=录可" 为什么要这么截呢,因为我自己这边机子测试貌似只要tokens=3 就可以了,是不是有其他的容错考虑
发表于 2023-2-3 19:04:48 | 显示全部楼层
回复 7# lonron


   没有,我是单纯的想到哪写哪了,我的估计是多了个空格,你用6楼大佬的就行了
 楼主| 发表于 2023-2-3 19:10:42 | 显示全部楼层
回复 6# terse


   

好像还是不对啊这结果
发表于 2023-2-3 19:21:50 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
lonron + 1 感谢帮助

查看全部评分

 楼主| 发表于 2023-2-3 19:26:11 | 显示全部楼层
回复 10# WHY


    这么多就你的结果测试成功了,但是为什么要对齐20个字符呢?有什么特别的门道
发表于 2023-2-3 19:28:49 | 显示全部楼层
回复 9# lonron
所以说要字符比较啊 这里的数值不能大于2147483647
发表于 2023-2-4 09:07:04 | 显示全部楼层
回复 11# lonron


    if后面比较的两个变量不加双引号的话,是数值比较,容易超出上限而出错;加上双引号,是字符串比较。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:16 , Processed in 0.023491 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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