批处理读取文本第n行并赋值给变量?--遍历所有行并赋值给变量数组

ruby 复制代码
::TraceLines.bat
@goto :test1

http://www.bathome.net/thread-27229-1-1.html#批处理如何获取txt文本中某行某列的内容/指定行指定列的内容
http://www.bathome.net/thread-47304-1-1.html#如何用批处理读取文本第二行并赋值给变量?
https://github.com/npocmaka/batch.scripts/blob/master/fileUtils/tailHead.bat
关联 .lnk: "文件查看:查找文件的第m行第n列.bat"

:test1
	@echo off&setlocal EnableDelayedExpansion
	chcp 936
    set my=hi baby
	rem 空行: 只含有空白字符(cr,space,tab,bs)的行不算空行。
	rem crlf 或 lf 算换行,单独的 cr 不算换行。crlf 或 lf 不计入本行空白字符内。
	set #m=1
	set #n=18
	rem 取从第 #m 行起到第 #n 行中的最后一个非空行。
	rem 好处是兼容特殊字符,不需要写文件。
	(for /l %%a in (!#m! 1 !#n!) do set /p Target=)<"%TEMP%\$"
	set Target

	rem 统计文本行数,最后一个空行不计入总数。
	for /f "tokens=*" %%a in ('type "%TEMP%\$" ^| find /c /v ""') do set sum=%%a
	echo "sum=!sum!"
	rem 遍历文件,取出所有非空行,赋值给 Line00X
	(for /l %%a in (1 1 !sum!) do (set /a no=%%a+1000&set /p Line!no:~1!=))<"%TEMP%\$"
	set Line&pause
@goto :EOF

代码:

:: ---------------------------------------------------------------------------------------------------------------------

::TraceLines.bat

@goto :test1

http://www.bathome.net/thread-27229-1-1.html#批处理如何获取txt文本中某行某列的内容/指定行指定列的内容
http://www.bathome.net/thread-47304-1-1.html#如何用批处理读取文本第二行并赋值给变量?
https://github.com/npocmaka/batch.scripts/blob/master/fileUtils/tailHead.bat

关联 .lnk: "文件查看:查找文件的第m行第n列.bat"

:test1

@echo off&setlocal EnableDelayedExpansion

chcp 936

set my=hi baby

rem 空行: 只含有空白字符(cr,space,tab,bs)的行不算空行。

rem crlf 或 lf 算换行,单独的 cr 不算换行。crlf 或 lf 不计入本行空白字符内。

set #m=1

set #n=18

rem 取从第 #m 行起到第 #n 行中的最后一个非空行。

rem 好处是兼容特殊字符,不需要写文件。

(for /l %%a in (!#m! 1 !#n!) do set /p Target=)<"%TEMP%\$"

set Target

rem 统计文本行数,最后一个空行不计入总数。

for /f "tokens=*" %%a in ('type "%TEMP%\$" ^| find /c /v ""') do set sum=%%a

echo "sum=!sum!"

rem 遍历文件,取出所有非空行,赋值给 Line00X

(for /l %%a in (1 1 !sum!) do (set /a no=%%a+1000&set /p Line!no:~1!=))<"%TEMP%\$"

set Line&pause

@goto :EOF

:: ---------------------------------------------------------------------------------------------------------------------

测试文本(%TEMP%\$):

注意: 文件编码格式为 GB2312(简体中文)

如何输入 cr 或 lf ? 使用 Notepad++ hexeditor 插件,找到 crlf , 选中 cr 或 lf , ctrl+x

:: ---------------------------------------------------------------------------------------------------------------------

rust 复制代码
 2:
 3:F:\快捷方式\Start Menu 开始菜单\!TEMP!.lnk

 5:F:\快捷方式\Start Menu 开始菜单\%CommonProgramFiles(x86)%.lnk
	tab
 7:F:\快捷方式\Start Menu 开始菜单\%TEMP%.lnk
 8:blank1 
 
10:blank3

12:CR1 

14:CR3 

16:C:\;set a=`@#$^&_+-={[}]));)( ''', !temp!,!my!,%temp%,%my%; if !%~1!==!%%~2!;%1,%~2%,%~; ^,^^,^^^,^^^^, !!,!,!!!, %%,%,%%%, ...txt (2).lnk



20:LF

22:aaa

24:C:\;set a=`@#$^&_+-={[}]));)( ''', !temp!,!my!,%temp%,%my%; if !%~1!==!%%~2!;%1,%~2%,%~; ^,^^,^^^,^^^^, !!,!,!!!, %%,%,%%%, ...txt.lnk
25:	 one

27:two

29:three

:: ---------------------------------------------------------------------------------------------------------------------

测试文本(%TEMP%\$)截图:

:: ---------------------------------------------------------------------------------------------------------------------

测试结果截图:

总结:

1 bat 里要把命令赋值给变量,除了 for...in('command')... , 就是 command>file, set/p var=<file

这两者都是有缺点的,前者 in() 会把 command 结果里的 %TEMP% ,!TEMP! 变量展开。

后者要写文件,在大批量运算时,会非常慢。

2 本文代码的好处是不用写文件,或者说只写一次。而且还兼容所有特殊字符。至于控制字符。。。呃,有点超纲了~~

3 想要测试是否兼容各种特殊字符,可以把 line022 拆出来,一个个特殊字符去测试。这里我就不说了,有勤劳的小蜜蜂吗?搞出亿点点例子来,测出不兼容的例子,请踢我一脚。

相关推荐
九年义务漏网鲨鱼1 天前
PyTorch DDP 随机卡死复盘:最后一个 batch 挂起,NCCL 等待不返回
人工智能·pytorch·batch
励志成为糕手17 天前
大数据MapReduce架构:分布式计算的经典范式
大数据·hadoop·mapreduce·分布式计算·批处理
hllqkbb17 天前
从 SGD 到梯度累积:Epoch、Batch、Step 的关系全解析
开发语言·人工智能·opencv·计算机视觉·batch
wuty00719 天前
记录一下Windows系统下的命令行参数的字符个数限制
cmd·process·windows命令行参数字符串限制·进程传参
wtsolutions1 个月前
Batch Conversion Online JSON Files (from URL) to Excel by WTSolutions
json·excel·batch
开开心心就好1 个月前
PDF转图片工具,一键转换高清无损
服务器·前端·智能手机·r语言·pdf·excel·batch
李小咖1 个月前
第2章 cmd命令基础:常用基础命令(1)
windows·网络安全·cmd·cmd命令·李小咖
巴伦是只猫2 个月前
【深度学习笔记 Ⅱ】8 mini-batch 梯度下降法
笔记·深度学习·batch
开开心心_Every2 个月前
免费PDF文件格式转换工具
java·智能手机·pdf·word·batch·java-zookeeper
IT成长日记2 个月前
【Docker基础】Dockerfile指令速览:基础常用指令详解
docker·容器·dockerfile·cmd·copy·from·run