Board logo

标题: [文本处理] [已解决] 批处理如何删除小数点 [打印本页]

作者: KLL    时间: 2022-1-16 02:57     标题: [已解决] 批处理如何删除小数点

本帖最后由 KLL 于 2022-1-16 23:54 编辑

求助 批处理如何删除 最后一列小数点
比如a.txt为
原内容如下  分隔号逗号
1269,圣杯,136.00,137.50,136.00,137.00,2819.17
1271,晨晖生技,60.80,61.40,59.20,61.40,730.4
1293,利统,39.05,39.55,38.10,38.50,64.505

生成后b.txt
1269,圣杯,136.00,137.50,136.00,137.00,281917
1271,晨晖生技,60.80,61.40,59.20,61.40,7304
1293,利统,39.05,39.55,38.10,38.50,64505


Thanks
作者: qixiaobin0715    时间: 2022-1-16 09:23

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (a.txt) do (
  4.     set str=%%~xi
  5.     echo,%%~ni!str:~1!
  6. )
  7. pause
复制代码

作者: 5i365    时间: 2022-1-16 10:26

回复 2# qixiaobin0715


    CMD在某些情况下, 解决问题还是很有优势的, 但是貌似有延迟变量, 把代码合成一行, 执行就出错
作者: qixiaobin0715    时间: 2022-1-16 11:20

回复 3# 5i365
为什么要合成一行呢,那样代码就会难懂。比如上面代码合成一行应当这样:
  1. @echo off&setlocal enabledelayedexpansion&(for /f "delims=" %%i in (a.txt) do set str=%%~xi&echo,%%~ni!str:~1!)&pause
复制代码

作者: 5i365    时间: 2022-1-16 14:03

本帖最后由 5i365 于 2022-1-16 14:06 编辑

回复 4# qixiaobin0715


    因为我要在一个软件里使用, 这个软件只支持单行的命令行
合并多行为单行的情况太复杂了,甚至变量名都要改, 有时干脆就直接用powershell了, 因为那软件支持多行的powershell
但有时, 一个功能用cmd实现起来, 确实干净利索

您合并CMD多行为一行, 有什么诀窍吗? 能分享一下吗
作者: KLL    时间: 2022-1-16 23:54

万分感谢!qixiaobin0715兄 协助
作者: qixiaobin0715    时间: 2022-1-17 10:57

回复 5# 5i365
以前看过 CrLf 写的代码,有一些是写成一行的,为了弄懂代码表达的意思,花费了一些精力,没有专门研究过。
在介绍for循环的帖子http://bbs.bathome.net/thread-2189-1-1.html变量延迟一节中,有一句话是说批处理的执行过程的:自上而下,逐条执行。我觉得要充分理解,对于将代码合成一行是有很大的帮助的。
一般来说要将代码合成一行总是要用到变量延迟的,主要是for循环有时会出问题,注意从for开始直到结束需要整个语句用括号括起来,并与前后语句使用&连接。
作者: Batcher    时间: 2022-1-17 11:00

回复 5# 5i365


    换成PowerShell是明智之举,建议不要在单行CMD上面浪费时间了。
作者: 5i365    时间: 2022-1-17 11:53

回复 7# qixiaobin0715


    感谢分享!
作者: 5i365    时间: 2022-1-17 11:53

回复 8# Batcher


    老大所言及是!!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2