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

[文本处理] 批处理 set /a 赋值为何不对?怎么保留小数呢?

[复制链接]
发表于 2025-1-3 16:51:07 | 显示全部楼层 |阅读模式
我遇到一个赋值问题,想把下面的第八列数据都除以100,就是amout1对应的数据。

数据文件(temp2.csv)如下:
yearmonth,com_code,com_name,partner_code,partner_name,province_code,province_name,amount1,unit1,dollar,custom_value,charges
202301,6111201000,,313,Albania,39,"Cleveland, OH",1,dozens,277,273,4
202301,6111202000,,402,Argentina,12,"Miami, FL",144,dozens,19831,19787,44
202301,6111205000,,402,Argentina,12,"Miami, FL",229,dozens,34038,33963,75
202301,6111206010,,402,Argentina,12,"Miami, FL",75,dozens,10476,10453,23
202301,6111206070,,402,Argentina,12,"Miami, FL",42,dozens,4443,4433,10
202301,6110909014,,103,Bangladesh,24,"Baltimore, MD",128,dozens,19260,18341,919
202301,6110909090,,103,Bangladesh,39,"Cleveland, OH",167,dozens,25295,24975,320
202301,6110909090,,103,Bangladesh,36,"New York, NY",3383,dozens,355741,334614,21127

程序如下:
  1. if exist chk.csv del chk.csv
  2. setlcal enabledelayedexpansion
  3. for /f "skip=1 delims=, tokens=1-12" %%a in (temp2.csv) do (
  4. echo %%h
  5. set /a value=%%h/100
  6. echo !value! >>chk.csv
  7.                                                     )
复制代码
set /a value=%%h/100,仅仅取值整数,而小数点后数值不能保留,这个怎么能够保留小数呢?
发表于 2025-1-3 18:56:43 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-1-3 18:59 编辑

回复 1# delab-1

批处不支持小数(浮点)运算,故须调用其他脚本的浮点运算功能,以下代码(存为 test.bat 运行,与 *.csv 文件同目录)是调用 powershell 功能的版本...

  1. @echo off &powershell "gc 'temp2.csv'|select -skip 1|%%{($_.split(',')[8])/100}">"chk.csv"
  2. type "chk.csv" &pause &exit/b
复制代码
 楼主| 发表于 2025-1-4 21:34:50 | 显示全部楼层
回复 2# aloha20200628
感谢,看来这个只能使用powershell的命令了,现在在学习中
发表于 2025-1-5 10:26:49 | 显示全部楼层
 楼主| 发表于 2025-1-5 19:05:09 | 显示全部楼层
回复 2# aloha20200628


    在请教一下:如何利用上面的powershell的管道命令,将所有的表值都输出,而且其中doller对应列的数值都除以100呢?目前程序将处理后的dollar数值写出来了,其它变量没有写出来。多谢多谢
发表于 2025-1-5 20:16:36 | 显示全部楼层
回复 5# delab-1

  1. @echo off &powershell "gc 'temp2.csv'|select -skip 1|%%{$a=$_.split(',');$a[10]/=100;$a -join ','}">"chk.csv"
  2. type "chk.csv" &pause &exit/b
复制代码
 楼主| 发表于 2025-1-6 09:25:39 | 显示全部楼层
回复 6# aloha20200628


   太感谢了,非常有帮助!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 14:26 , Processed in 0.013511 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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