标题: 批处理上下行处理与变量延迟练习 [打印本页]
作者: cjiabing 时间: 2010-11-11 13:38 标题: 批处理上下行处理与变量延迟练习
因在这个问题上吃过好多次亏,特地挑来给新手练习。
题目:
有一文本 1.txt ,内容是五行数字:复制代码
要求:
1、求这五行数字的总和;
2、一次显示相邻的上下两行数字;
3、比较上下行异同,提取重复部分,或过滤掉重复的内容。
其中,第三题其它地方有,可以选做,没做过的建议做做。
提示:-
- 1、在一个FOR的循环中,FOR解析文本的时候,通常一次只显示一行内容,无法同时显示两行或两行以上的内容。
- 2、在FOR中设置变量,除了环境变量等系统设定好的变量外,一般的变量会被抛弃,除非将变量的百分号改成感叹号。此时的变量在遇到endlocal之前可以全局通用,甚至在FOR的循环中通用。
- 3、开启变量延迟后,利用FOR循环前后时间点来设置变量,可同时得到这两个时间点上的变量,一个是新设的变量(现在——本次——当前行),一个是延迟下来的变量(过去——上次——上一行),它们代表的正是文本中的上下行。
复制代码
[ 本帖最后由 cjiabing 于 2010-11-11 13:46 编辑 ]
作者: cjiabing 时间: 2010-11-12 21:10
- @echo off & setlocal enableextensions enabledelayedexpansion
- ::求总和
- set str=
- for /f %%a in (1.txt) do (
- set mum=!str!
- set str=%%a
- set /a var=!mum!+%%a
- set str=!var!
- )
- echo !var!
- pause
-
- @echo off & setlocal enableextensions enabledelayedexpansion
- ::同时显示上下行
- for /f %%a in (1.txt) do (
- echo !ddr! %%a
- set ddr=%%a
- )
- pause
-
- @echo off & setlocal enableextensions enabledelayedexpansion
- ::提取上下行相同部分
- for /f %%a in (1.txt) do (
- if !bar!==%%a echo %%a
- set bar=%%a
- )
- pause
- @echo off & setlocal enableextensions enabledelayedexpansion
- ::过滤上下行重复(相同)部分
- for /f %%a in (1.txt) do (
- if not !jar! == %%a echo %%a
- set jar=%%a
- )
- pause
复制代码
[ 本帖最后由 cjiabing 于 2010-11-12 21:16 编辑 ]
作者: skuny 时间: 2010-12-23 00:51
- @echo off
- set /a a=0
- for /f %%i in (1.txt) do (
- set /a a=a+%%i
- )
- echo %a%
- pause
复制代码
作者: skuny 时间: 2010-12-23 01:00
- @echo off
- setlocal enabledelayedexpansion
- set /a a=0
- for /f %%i in (1.txt) do (
- set /a a+=1
- if !a! gtr 1 echo !b! %%i
- set b=%%i
- )
- endlocal
- pause
复制代码
作者: ithinkican 时间: 2010-12-23 09:53
什么意思这是…
作者: skuny 时间: 2010-12-23 11:14
- ::不是比较上下两行,而是比较全部内容
- @echo off
- setlocal enabledelayedexpansion
- for /f %%i in (1.txt) do (
- set /a b=0
- for /f %%j in (1.txt) do (
- if %%i == %%j (set /a b+=1)
- )
- if !b! gtr 1 echo %%i 重复!b!次
- if !b! == 1 echo 单一的数字为:%%i
- )
- endlocal
- pause
复制代码
作者: mac007cn 时间: 2010-12-23 23:28
今天下午看到的这个题目,有点意思。23点俺家霖霖终于睡着了。简单思考了一下,实现了前两步;第三步貌似麻烦,以后再说吧。睡了,明天还得早起呢。- ::问题出处:http://www.bathome.net/thread-9936-1-1.html
- ::批处理上下行处理与变量延迟练习。XP SP3 CMD测试通过。
- ::有一文本 1.txt ,内容是五行数字:
- :: 50
- :: 50
- :: 1242
- :: 9979900
- :: 7
- ::要求:1、求这五行数字的总和;2、一次显示相邻的上下两行数字;
- ::3、比较上下行异同,提取重复部分,或过滤掉重复的内容。其中,
- ::第三题其它地方有,可以选做,没做过的建议做做。
- @echo off
- setlocal enableextensions
- setlocal enabledelayedexpansion
-
- set /a sum=0
- set "str0="
- set "str="
- for /f %%a in (1.txt) do (
- set /a sum+=%%a
- set "str0=!str!"
- set "str=%%a"
- echo.
- echo 上一行:!str0!
- echo 当前行:!str!
- )
- echo.
- echo 总和:%sum%
- echo.
复制代码
作者: wolonga123 时间: 2011-1-15 14:45
- @echo off
- set /a sum=0
- for /f %%i in (1.txt) do ( set /a sum+=%%i )
- echo %sum%
- pause
复制代码
作者: Hello123World 时间: 2011-7-19 17:58
- @echo off & setlocal enableextensions enabledelayedexpansion
-
- ::同时显示上下行
-
- for /f %%a in (1.txt) do (
-
- echo !ddr! %%a
-
- set ddr=%%a
-
- )
-
- pause
复制代码
这个同时显示上下两行的代码让我实在无语,第一行只显示了第一行……
还有就是楼主自己的算法太多余,这种加法用的着变量延迟吗?- @echo off
- for /f %%i in (1.txt) do Set /a a=a+%%i
- echo %a%
- pause
复制代码
作者: cjiabing 时间: 2011-7-19 18:13
本帖最后由 cjiabing 于 2011-7-19 18:39 编辑
9# Hello123World 呵呵,以前不懂写的,然后复制粘贴,复制粘贴……
上下行数据关系:
- @echo off & setlocal enableextensions enabledelayedexpansion
- for /f %%i in (1.txt) do (
- Set /a a=a+%%i
- if not "!b!"=="" echo 显示上行:!b!;下行:%%i
- if /i %%i==!b! echo 显示相同行:!b!
- set b=%%i
- )
- echo 显示累加总和:!a!
-
- pause
复制代码
作者: 尘丶 时间: 2015-8-10 18:02
一- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (1.txt) do set /a num=!num!+%%a
- echo;!num!
- pause
复制代码
二- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (1.txt) do (
- echo;%%a
- echo;!num!
- set num=%%a
- )
- pause
复制代码
三- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (1.txt) do (
- findstr "%%a" 2.txt>nul 2>nul||echo;%%a>>2.txt
- )
- pause
复制代码
前面好像出过类型的
作者: 尘丶 时间: 2015-8-10 18:02
一- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (1.txt) do set /a num=!num!+%%a
- echo;!num!
- pause
复制代码
二- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (1.txt) do (
- echo;%%a
- echo;!num!
- set num=%%a
- )
- pause
复制代码
三- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (1.txt) do (
- findstr "%%a" 2.txt>nul 2>nul||echo;%%a>>2.txt
- )
- pause
复制代码
前面好像出过类型的
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |