批处理读取文本第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 拆出来,一个个特殊字符去测试。这里我就不说了,有勤劳的小蜜蜂吗?搞出亿点点例子来,测出不兼容的例子,请踢我一脚。

相关推荐
爱的叹息3 天前
一个完整的 Spring Batch + RepositoryItemWriter + CrudRepository 示例,包含详细注释说明
windows·spring·batch
爱的叹息4 天前
Spring Batch ItemWriter 常见实现类及对比(含 RepositoryItemWriter)
java·spring·batch
宇宙无敌花心大萝卜8 天前
使用BAT批处理加PYTHON进行WORD批量文字删除
python·word·bat·批处理
tortorish11 天前
PyTorch中Batch Normalization1d的实现与手动验证
人工智能·pytorch·batch
宇宙无敌花心大萝卜11 天前
使用bat批量获取WORD中包含对应字符的段落,段落使用回车换行
开发语言·word·bat·批处理·vbs
Jeremy_102221 天前
SpringBatch之ResultSet.next()
spring·batch
HXQ_晴天1 个月前
深度学习中卷积层(Conv)、BN层(Batch Normalization)和 ReLU层(Rectified Linear Unit)的详细介绍
人工智能·深度学习·batch
IT技术分享社区1 个月前
电脑软件:推荐一款非常强大的视频音频转换剪辑工具FFmpeg Batch AV Converter V3.12
ffmpeg·音视频·batch·剪辑工具
类人_猿1 个月前
PhotoShop批处理
ui·photoshop·批处理·photoshop批处理
NiNg_1_2342 个月前
Windows cmd常用命令
windows·cmd