BAT批处理文本替换

BAT批处理方式进行文件的字符串搜索替换

在matlab提取txt中的实验数据,由于记录原因,传感器出错后把数字存为了nan,对于提取数据很不方便。

于是查了查如何批处理对txt文本进行替换。

CMD/BAT 批处理的方式,进行文件的字符串搜索替换工作,参考博客

@echo off
setlocal EnableDelayedExpansion
 
set "CurrCD=%~dp0"
set "strOld=aaaaa"
set "strNew=zzzzz"
 
:: 将当前目录(包括子目录)下的所有 TXT 文本中的 aaaaa 替换为 zzzzz
for /f %%i in ('dir /b /s /a:-d *.txt') do (
  powershell -Command "(gc %%i) -replace '%strOld%', '%strNew%' | Out-File -Encoding ASCII %%i"
)

基本语法解释:

在cmd中输入 命令 /? 可显示此命令的帮助信息

@echo off: 此语句常用于开头,表示不显示所有的命令行信息,包括此句

set :

SET [variable=[string]]

variable  指定环境变量名。

string    指定要指派给变量的一系列字符串。

for循环的基本格式

FOR %%variable IN (set) DO command [command-parameters]
 %%variable 指定一个单一字母表示可替换的参数。
 (set)    指定一个或一组文件。可以使用通配符。
 command  指定对每个文件执行的命令。
 command-parameters 为特定命令指定参数或命令行开关。

参数:FOR有4个参数 /d /l /r /f

FOR /D %%variable IN (set) DO command [command-parameters]

含义:如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。

FOR /D %%variable IN (set) DO command [command-parameters]
含义:如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。

FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]

含义:检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。

FOR /L %%variable IN (start,step,end) DO command [command-parameters]
含义:该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生序列 (5 4 3 2 1)。

/F 迭代及文件解析
使用文件解析来处理命令输出、字符串及文件内容。使用迭代变量定义要检查的内容或字符串,并使用各种options选项进一步修改解析方式。使用options令牌选项指定哪些令牌应该作为迭代变量传递。请注意:在没有使用令牌选项时,/F 将只检查第一个令牌。
文件解析过程包括读取输出、字符串或文件内容,将其分成独立的文本行以及再将每行解析成零个或更多个令牌。然后通过设置为令牌的迭代变量值,调用 for 循环。默认情况下,/F 传递每个文件每一行的第一个空白分隔符号。跳过空行。

dir命令

参考博客

/s 查找当前目录以及所有子目录下的文件
/b 舍弃标题与摘要内容 
/d  跟宽式相同,但文件是按栏分类列出的。
/n  长列表格式 即 竖立格式 与光杆dir 下无异
/b /a:d 指定显示所有具有该属性的文件
/b /d&/w 交互使用时,/d&/w 开关 无效。
/q  显示文件所有权信息、或者说文件所有者信息
/w 宽行格式显示 X轴序列  文件名过长 无效
/d 宽行格式显示 Y轴序列   文件名过长 无效 
/d & /w  会在在文件夹的前后添加"[]"X
/l 所显示文件名,全部为小写英文字母。
/c&/-c  禁用文件大小显示千位数分隔符。默认显示分隔符“,”  /-c  不显示分隔符。
/a:d 只显示文件夹(包括隐藏文件夹)  
/a:h 只显示隐藏文件 (包括具有当前属性的其他三种文件、夹)
/a:r 仅显示只读文件(包括具有当前属性的其他三种文件、夹) 
/a:s 仅显示系统文件(包括具有当前属性的其他三种文件、夹)
/a:a 只显示存档文件- - X----- 只显示文件 (包括具有存档属性的其他三种属性文件)  这个命令对应 /a:d  只显示文件夹。 

windows中文件共有四种属性、
分别为 存档、只读、系统、隐藏
/O   用分类顺序列出文件。
  排列顺序      N  按名称(字母顺序)     
                      S  按大小(从小到大)
                      E  按扩展名(字母顺序)   
                      D  按日期/时间(从先到后)
                      G  组目录优先     
                      -  反转顺序的前缀

逐个解释dir /b /s /a:-d *.txt

/b 	舍弃标题与摘要内容
/s 	查找当前目录以及所有子目录下的文件
/a:-d 	只显示文件不显示文件夹
*.txt	要求仅显示txt文件

编码问题解释:在Out-File后加-Encoding ASNII 即可实现改变输出文本的编码,默认编码为UTF-16 LE

有意思的是,-Encoding utf8 输出编码为带有BOM的utf8


后续继续研究powershell的相关语法和命令

补充

如何删除包含特定字符串的所有行呢?

@echo off
setlocal EnableDelayedExpansion
 
:: 删除 d:\aaa.txt 中,包含字符串 abc 的所有行
set "FileName=d:\aaa.txt"
set "sDelLine=abc"
powershell -Command "$data = foreach($line in gc %FileName%){ if($line -notlike '*%sDelLine%*') {$line}} $data | Out-File %FileName%"
小软件Replace Plus:为多个文本文件做内容批量替换 当我们的文本里有些相同的文本内容要替换成其他内容时,可以运用到“文本替换”功能,这一功能在诸多的文本编辑软件里都有,并不算稀奇。但是,如果你有多个文件,想要同时替换它们里面的一些相同内容,显然不是其简单的替换功能就能够达到的。要想批处理完成N个文件的文本同时替换,我给大家推荐一个小工具——Replace Plus。它是一款绿色小软件,并不需要安装,直接双击打开即可使用。   在列表栏里点击右键,选择“添加文件”即可将单独的文件添加进列表,如果您想要更加省事一些,就将欲替换文本的文件放置于一个文件夹下。右键点击选择“添加目录”,将那个文件夹添加进来,该目录下的所有文件就直接添加进来了,省去了一个一个添加的麻烦。   在“查找”栏内输入欲查找的内容,在“替换”栏里输入欲替换的内容,点击“执行替换”,默认情况下会跳出“替换”对话框询问是否要替换,如果要一劳永逸地不必每个文件都跳出对话框来询问,可直接点击“替换全部”。   当列表里的“备注”栏显示出“替换成功”,即表示已经将不同文件里的相同内容替换完成。并且在列表里还会显示替换成功的数量,一目了然(如图),很简便也很实用吧!要删除列表里的内容,直接选定欲删除的内容后,在右键菜单里点击“删除”即可。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值