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

[文本处理] 批处理如何给数字添加千分位分隔符?

[复制链接]
发表于 2016-3-9 11:11:41 | 显示全部楼层
回复 15# codegay

呵呵,就跟切菜一样。
发表于 2016-3-9 11:48:31 | 显示全部楼层
本帖最后由 sishentibu 于 2016-3-9 11:52 编辑

回复 9# happy886rr

有个地方写错了。
  1.     @echo off
  2.     set a=1000052
  3.     set /a b=a/1000
  4.     set /a c=a/1000000
  5.     if %b%==0 (echo %a%) else (
  6.             if %c%==0 (echo %a:~0,-3%,%a:~-3%) else (echo %a:~0,-6%,%a:~-6,3%,%a:~-3%))
复制代码
最后一个echo改下就好了
发表于 2016-3-9 22:47:35 | 显示全部楼层
本帖最后由 WHY 于 2016-3-10 21:19 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. set "n=-1234567890"
  3. for /l %%i in (-18 3 -3) do set "n=!n:~0,%%i!,!n:~%%i!"
  4. for /f "tokens=*delims=," %%i in ("%n%") do set "n=%%i"
  5. echo;%n:-,=-%
  6. pause
复制代码
发表于 2016-3-10 20:39:07 | 显示全部楼层
本帖最后由 sishentibu 于 2016-3-10 20:56 编辑

回复 18# happy886rr


抱歉,开始想错了。

set num=!num:~0,-3!
如果num只有2位数,是不是num就为空了?就是"!num!"=="" ?
发表于 2016-3-10 21:36:53 | 显示全部楼层
回复 20# sishentibu
对,0,-3那句就是去掉最后三个。自然就空了。
发表于 2016-3-11 19:27:22 | 显示全部楼层
回复 21# happy886rr

你那割法是真巧妙,按我那写法,位数一多就抗不住了。
想了下,你这种写法,只要是有规律的分割都可以啊,不仅仅是数字
发表于 2016-3-11 19:50:18 | 显示全部楼层
本帖最后由 happy886rr 于 2016-3-11 20:20 编辑

回复 22# sishentibu
基本上就是按字符串分割的,所以会出现负号被分割的情况如-,300
还需要加一句!p1:-,=-!就更完美了。
这是改进后的

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /p num=输入数字:
  4. :cut
  5. if "!num!"=="" (
  6.         set p1=!p1:-,^=-!
  7.         echo !p1:~1! &pause>nul&exit
  8. )
  9. set p1=,!num:~-3!!p1!
  10. set num=!num:~0,-3!
  11. goto cut
复制代码
发表于 2016-3-11 20:54:12 | 显示全部楼层
回复 22# happy886rr

我又有疑问了。。
第一遍执行的时候,set p1=,!num:~-3!!p1! ,p1不是还没有定义吗,难道后方的那个p1直接为空?
上面的还能解释的话,set p1=!p1:-,^=-! 就有些不太明白了。一般情况下,不是!p1:-,=-! 吗?为什么会多了个^,这个不是转义用的吗?
我去掉^的情况下,批处理还是正常运行了。。然后按我的理解,!p1:-,^=-!不是语法不对吗。。。
发表于 2016-3-11 21:57:15 | 显示全部楼层
本帖最后由 happy886rr 于 2016-3-11 22:03 编辑

回复 23# sishentibu
因为setlocal开启变量延迟,所以p1不用定义。直接拿来用。
set p1=!p1:-,^=-! 一行里出现两个等号,怕歧义,所以加个^让机器好理解
发表于 2016-3-12 19:48:39 | 显示全部楼层
回复 24# happy886rr
Set str=%str=-% 类似这种,不是set的本来用法吗,你这种写法我反而没看懂。。
也就是说,从结果来说,加不加^都可以的吧?
发表于 2016-3-12 19:54:45 | 显示全部楼层
回复 25# sishentibu
有时候会有用比如你要过滤等号!str:=-=!就会歧义
发表于 2016-3-13 18:02:32 | 显示全部楼层
回复 26# happy886rr

好吧。
那是不是加了^, 就是我们所需要的那个赋值符号?
但一般来说,用^转义了后,不是普通的一个字符吗
发表于 2016-3-13 18:46:11 | 显示全部楼层
回复 27# sishentibu
这好像就是个漏洞,不管转不转义,!str: ==!,里边只要遇到第一个等号就工作。微软就这么设计的。
发表于 2016-3-13 22:53:31 | 显示全部楼层
回复 28# happy886rr


    不会有歧义的,过滤等号和*一直是个老大难问题(摊手)...详见:
http://www.bathome.net/viewthread.php?tid=6038
发表于 2016-3-14 17:46:54 | 显示全部楼层
回复 28# happy886rr


    29#的CrLf貌似提出异议了。不过我看的有点晕,暂时不去研究那个了
关于截断,我还有个问题请教下
例如
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in ("123465") do (
  4. echo %%i
  5. set a=%%i
  6. echo !a:~0,2!)
  7. pause
复制代码
这个可以不可以没有set a=%%i 这一步的?我自己试不出来。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 23:54 , Processed in 0.020891 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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