<# :
cls&echo off
rem 对当前目录下所有txt文本文件内每一行的行首/开头插入/添加指定字符串内容
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
set "newfolder=#result"
if not exist "%newfolder%" md "%newfolder%"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312')))) -Args '%~f0'"
echo%#% +%$%%$%/%@% %z%
pause
exit
#>
$insertword="ttt="
$newfolder=get-item -liter $env:newfolder
$self=get-item -liter $args[0]
$path=$self.Directory.FullName
$files=@(dir -liter $path|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])})
if($files.length -ge 1){
$enc=[Text.Encoding]::GetEncoding('GB2312')
write-host $files[0].Name
$arr=New-Object -TypeName System.Collections.ArrayList
$text=[IO.File]::ReadAllLines($files[0].FullName,$enc)
for($j=0$j -lt $text.length$j++){
$line=$insertword+$text[$j]
[void]$arr.add($line)
}
$newfile=$newfolder.FullName+'\'+$files[0].Name
[IO.File]::WriteAllLines($newfile,$arr,$enc)
}
最后还是想用简单的脚本解决,发现使用 sed 命令可以方便得在文件每一行后添加一个字符。首先看一下 sed 命令。
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间” (pattern space) ,接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。 Sed 主要用来自动编辑一个或多个文件;简化对文件的反复 *** 作;编写转换程序等。
假设处理的文本为 test.file ,在每行的头添加字符,比如 HEAD ,命令如下:
在每行的行尾添加字符,比如 TAIL ,命令如下:
几点说明:
这样就处理完了!总之恰当使用sed命令是可以避免来回打开文件造成的时间浪费,可以使用sed命令在linux脚本中做一些更好玩的事情。希望这篇文章可以给你一些帮助~
@echo off::设置要添加的内容
set str=这是首行内容
for /f "delims=" %%a in ('dir /a-d/s/b *.txt') do (
(echo %str%
type "%%~a")>tmp_file$
move /y tmp_file$ "%%~a">nul
)
pause
这个就是对当前目录下(包括子目录),所有txt文档添加指定内容。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)