标题: [数值计算] 批处理如何将文本里的多行数字相加并输出总和等于指定数值时所在的行数和行内容 ... [打印本页]
作者: ads350668398 时间: 2016-11-13 10:18 标题: 批处理如何将文本里的多行数字相加并输出总和等于指定数值时所在的行数和行内容 ...
本帖最后由 pcl_test 于 2016-11-24 08:36 编辑
逐行计算输出和值所在的行
12
10
8
4
6
15
11
12
4
6
8
1
11
7
14如果是 13
6
6
逐行相加计算和值输出特定数值的行~
例子:
目的 得到和为 129的行数 和所在的行的内容 【15行 14】
如果是13!【16行 6 并和值134】一起显示输出
!!
其实要用乘法乘法会涉及到大数这~~¥%……&
关于大数的那个帖子真真是#¥%&*%
作者: ads350668398 时间: 2016-11-13 20:17
本帖最后由 ads350668398 于 2016-11-13 21:40 编辑
- echo
-
- for /f "tokens=1-3 delims= " %%a in (mss.txt) do (
- set /a "m+=%%a"
- )
- set m
- pause
复制代码
关于【code】 网页不能自己加么
作者: ads350668398 时间: 2016-11-14 15:52
本帖最后由 ads350668398 于 2016-11-14 16:25 编辑
没有办法
这样可以不
12
10 8
4 6 15
........
金字塔形
每一行计算
和129相比较- @echo off&setlocal enabledelayedexpansion
- set s
- :a
- set /a s+=1
- (for /f %%1 in (mss.txt)do (set /a wind+=1
- if !wind! leq %s% set /p=%%1 <nul
- if !wind!==%s% echo.&&set wind=0))>1232.txt&pause&goto a
复制代码
怎么输出金字塔
作者: ads350668398 时间: 2016-11-14 22:51
谁会做金字塔
作者: Batcher 时间: 2016-11-15 08:46
回复 2# ads350668398
不能。网页无法自动判断。
作者: ads350668398 时间: 2016-11-15 09:24
本帖最后由 pcl_test 于 2016-11-15 10:06 编辑
- PUBLIC=C:\Users\Public
- SESSIONNAME=Console
- SystemDrive=C:
- SystemRoot=C:\Windows
- TEMP=C:\Users\ADMINI~1\AppData\Local\Temp
- TMP=C:\Users\ADMINI~1\AppData\Local\Temp
- USERDOMAIN=PC201605020431
- USERNAME=Administrator
- USERPROFILE=C:\Users\Administrator
- windir=C:\Windows
- windows_tracing_flags=3
- windows_tracing_logfile=C:\BVTBin\Tests\installpackage\csilogfile.log
- ALLUSERSPROFILE=C:\ProgramData
- ……
复制代码
请按任意键继续. . .
这是什么意思 我在做实验 脚本 怎么出了这个东西??
仔细发现 我输出的【M】终于是按着逐行相加的 但是怎么会这么多英文 在中间》???????????
大神指点啊 为什么是在 9行 也就是逐行加到【m=82后】???
作者: Batcher 时间: 2016-11-15 09:28
回复 6# ads350668398
脚本发出来看看,可能不小心执行了 set 命令。
作者: ads350668398 时间: 2016-11-15 09:36
- @echo off&setlocal enabledelayedexpansion
-
- echo %date%%time%
- @echo off
- for /f "tokens=1-2" %%i in (mss.txt) do (set /a m+=%%i & set %m% & ping -n 2 127.1>nul)
-
-
- pause
复制代码
作者: GNU 时间: 2016-11-15 09:51
回复 8# ads350668398 - @echo off
- setlocal enabledelayedexpansion
- echo %date%%time%
- for /f "tokens=1-2" %%i in (mss.txt) do (
- set /a m+=%%i
- echo !m!
- )
- pause
复制代码
作者: GNU 时间: 2016-11-15 09:53
setlocal enabledelayedexpansion 启用变量延迟扩展之后,for循环内部的变量应该使用 !m! 而不是 %m%
作者: ads350668398 时间: 2016-11-15 10:54
回复 9# GNU
谢谢大神门的关注 我加了一行 if /i !m! geq 129 echo !s! !m!
输出的是 大于129的【所有行】 !!要做到只输出 大于等于129的【一行】怎么做啊??
作者: ads350668398 时间: 2016-11-15 19:20
本帖最后由 ads350668398 于 2016-11-15 19:24 编辑
- for /f "tokens=1-6" %%i in (!ab!.txt) do (
- set /a s+=1
- set /a m+=%%i
- if /i !m! geq %aa% echo !s! %%i% !m!
- )
- set ii=!i!
- for /f "delims=" %%1 in ("%s% %ii% %m%") do (
-
- echo %%1
复制代码
关于变量【%%i】的传递和正确写法 晕菜了
%i %%i%% %!i!% %%%i%%%
用【set ii=!i!】 和不用对后面的FOR的【%%i】的写法。。。有变化么
作者: GNU 时间: 2016-11-15 21:49
回复 11# ads350668398
符合条件之后就跳出for循环- for /f "tokens=1-6" %%i in (!ab!.txt) do (
- set /a s+=1
- set /a m+=%%i
- if /i !m! geq %aa% (
- echo !s! %%i !m!
- goto :next
- )
- )
-
- :next
- pause
复制代码
作者: GNU 时间: 2016-11-15 21:57
回复 12# ads350668398
set ii=!i! 这种写法可能无法实现你希望的目的
%%i 在1到5行代码之间有效
for循环结束之后的第六行%%i没有值,用!i!也没有值。
作者: ads350668398 时间: 2016-11-15 22:51
回复 14# GNU
谢谢 括号里面就OK了
作者: ads350668398 时间: 2016-11-23 14:02 标题: 第二次运算错误为什么
- @echo &setlocal enabledelayedexpansion
- set /p aa=和值
- set /p ab=要读取的文本名
- echo %date%%time%
-
- setlocal enabledelayedexpansion
- echo %date%%time%
-
- for /f "tokens=1-6 delims= " %%i in (!ab!.txt) do (
- set /a s+=1
- set /a m+=%%i
- if /i !m! geq %aa% echo !s! %%i% !m! >>1h.txt
-
- )
- for /f "delims=" %%1 in (1h.txt) do (
- echo %%1 >>1hh.txt
- start 1hh.txt
- del 1h.txt
- goto a
- )
- :a
- ::pause&call 逐行相加4.bat&exit
复制代码
为什么第二次三次运行的时候 不能正确 运算
ab.txt
1
2
5
9
8
6
7
9
5
作者: GNU 时间: 2016-11-23 22:43
我猜是没有做变量初始化
把参与计算的变量在代码开头设置成 0 试试看
作者: ads350668398 时间: 2016-11-24 08:28
我好菜鸟啊 555
作者: ads350668398 时间: 2016-11-30 11:53
回复 17# GNU
if /i !m! geq %aa% echo !s! %%i% echo %%%j% !m! >>1h.txt
求困惑 %i 和%j中间输出为什么没有空格啊??
作者: GNU 时间: 2016-12-1 11:41
回复 19# ads350668398
把以下信息分别发出来:
最新的完整代码
希望得到的结果
实际得到的结果
作者: ads350668398 时间: 2016-12-2 08:35
本帖最后由 ads350668398 于 2016-12-2 08:54 编辑
回复 20# GNU
a. txt原本
1 13 2
2 16 2
3 15 1
4 3 1
5 1 2
6 3 1
7 16 2
8 9 1
输出字符中间为什么没有空格啊?- @echo &setlocal enabledelayedexpansion
- for /f "tokens=2-6 delims= " %%i in (a.txt) do (
- set /a s+=1
- set /a m+=%%j
- if /i !m! geq 5 echo !s! %%i% echo %%%j% !m! >>1h.txt
-
- )
复制代码
输出
3 151 5
4 31 6
5 12 8
6 31 9
7 162 11
8 91 12
【希望结果】
3 15 1 5
4 3 1 6
5 1 2 8
6 3 1 9
7 16 2 11
8 9 1 12
作者: CommandBatCmd 时间: 2016-12-2 10:12
回复 21# ads350668398
"delims=空格",空格已被过滤掉!- @echo &setlocal enabledelayedexpansion
- for /f "tokens=2-6 delims= " %%i in (a.txt) do (
- set /a s+=1
- set /a m+=%%j
- if /i !m! geq 5 echo !s! %%i % echo %%%j% !m! >>1h.txt
-
- )
- pause
复制代码
作者: GNU 时间: 2016-12-2 11:27
回复 21# ads350668398
if /i !m! geq 5 echo !s! %%i% echo %%%j% !m! >>1h.txt
for循环的控制变量应该是:
%%i
%%j
你的写法是错误的- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=2-6 delims= " %%i in (a.txt) do (
- set /a s+=1
- set /a m+=%%j
- if /i !m! geq 5 echo !s! %%i %%j !m!>>1h.txt
- )
复制代码
作者: ads350668398 时间: 2016-12-2 11:50
回复 23# GNU
set kk=
if /i !m! geq %aa% echo !s! %%i% %%kk% %%j% !m! >>1h.txt
这个空给KK 也能想的结果 晕了
作者: GNU 时间: 2016-12-2 13:23
回复 24# ads350668398
已经说过了,%%i% 这种写法是错误的。至于最终代码怎么写,你高兴就好。
作者: ads350668398 时间: 2016-12-2 14:33
回复 25# GNU
恩
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |