概述
本文讲述的是对文本的内容进行数据处理,删除文本中每行字符串的前n个字符,实现数据裁剪。
背景
本人在开发的过程中,需要对一些数据进行裁剪后仿真,但是奈何数据量庞大,但是又需要经常对数据进行裁剪,所以准备写一个脚本进行数据裁剪,减少手动的工作。
需求
1、可以读取文本文件中每一行数据;
2、对文本文件中每行数据进行裁剪;
需求分析
1、读取文件文件可以使用for循环读取;
2、对文本文件中的数据进行裁剪可以使用到变量提取;
需求实现
@echo off
rem 设置输入的文本文件
set fn=test.txt
rem for循环读取文本,使用usebackq可以使文本文件名包含空格等字符
(for /f "usebackq delims=" %%i in ("%fn%")do (
rem 输出读取到的单行字符串到控制台(con)
echo %%i>con
set h=%%i
rem 设置延迟环境变量扩展
setlocal enabledelayedexpansion
rem 输出单行字符串去除前2个字符的数据
echo !h:~2!
rem 结束延迟环境变量扩展
endlocal
))>output.txt
pause
使用示例
1、在脚本同目录下创建文本文件test.txt
123456789
abcd
ABCD
2、执行脚本输出output.txt文件
3456789
cd
CD
3、查看对比test.txt和output.txt可以得知每行的前2个字符被删除了。
拓展操作
通过对字符串的变量取值时是可以对字符串进行操作的,需要注意的是如果设置延迟环境变量扩展(setlocal enabledelayedexpansion),在结束延迟环境变量扩展(endlocal)前,对会变化的变量需要使用’!‘代替’%'。
如下则是对字符串的一些操作方式:
参考:bat批处理之字符串操作的实现
字符串的截取
@echo off
set testStr=abcdefghijklmnopqrstuvwxyz0123456789
rem set 目标字符串=%源字符串:~起始值,截取长度%
rem echo %源字符串:~起始值,截取长度%
echo 原始字符串: %testStr%
echo 提取前五个字符串:%testStr:~0,5%
echo 提取最后五个字符串:%testStr:~-5%
echo 去除前两个字符的字符串:%testStr:~2%
echo 提取第一个到倒数第六个字符串:%testStr:~0,-5%
echo 提取五个字符串,从第四个字符开始:%testStr:~3,5%
pause
脚本的执行结果如下:
字符串的替换
@echo off
set repStr=aaabbbcccdddeeefff
echo 替换之前: %repStr%
echo 替换后:%repStr:aa=zz%
echo repStr=%repStr%
set "repStr=%repStr:aa=zz%"
echo repStr=%repStr%
pause
脚本的执行结果如下:
字符串合并
@echo off
set aa=aabbcc
set bb=ddeeff
echo %aa%%bb%
echo aa=%aa%
echo bb=%bb%
set "aa=%aa%%bb%"
echo aa=%aa%
pause
脚本的执行结果如下:
字符串查找
@echo off
rem 启用命令扩展,参见setlocal /?命令
setlocal enabledelayedexpansion
rem 注意,这里是区分大小写的!
set str1=This is a test string
set ch1=t
rem 复制字符串,用来截短,而不影响源字符串
set str=%str1%
:next
if not "%str%"=="" (
set /a num+=1
rem 比较首字符是否为要求的字符,如果是则跳出循环
if "!str:~0,1!"=="%ch1%" (
goto last
)
set "str=%str:~1%"
goto next
)
rem 没有找到字符时,将num置零
set /a num=0
:last
echo 字符'%ch1%'在字符串"%str1%"中的首次出现位置为%num%
echo 输出完毕,按任意键退出&&pause>nul&&exit
脚本的执行结果如下:
注意事项
中文乱码解决
解决方法
用记事本打开脚本文件后,进行文件另存,在文件另存的下方将编码修改为“ANSI”即可。
问题原因
在使用记事本编辑bat时,脚本中需要输出中文时,会出现中文乱码的情况,其实是因为格式不同使脚本运行过程中解码错误导致显示乱码的情况。
总结
脚本基本完成功能,可以实现对数据的裁剪,同时得知bat脚本中的变量最大长度是8191个字节,同时在问题解决的过程中也查找了相关的拓展知识,也是收益匪浅。
免责声明:本文内容含网络参考、作者编写等,内容版权归原作者所有,未经允许,禁止转载。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。