标题: [文本处理] 求助批处理如何遍历文件夹下markdown文件并删除空行 [打印本页]
作者: muihiuwev 时间: 2022-1-27 16:54 标题: 求助批处理如何遍历文件夹下markdown文件并删除空行
预期:遍历文件夹下包括子文件夹下所有markdown文件,查找并删除所有空行,保存退出。
例:
修改前:- ## 标题二
-
- - 无序条目1
-
- - 无序条目2
-
-
- 1. 有序条目1
-
- 1. 有序条目2
复制代码
修改后:- ## 标题二
- - 无序条目1
- - 无序条目2
- 1. 有序条目1
- 1. 有序条目2
复制代码
如上,删除单行或连续空行,包括含空格的空行,不用跳过特定行不删除,不用另存为新文件。
在论坛找了一圈,找到一个能用的,但运行后某些字符会变成乱码。命令如下:- @echo off
- for /f "delims=" %%a in ('dir /a-d/s/b *.txt') do (
- (for /f "delims=" %%b in ('type "%%a"') do echo;%%b)>tmp
- move tmp "%%a"
- )
复制代码
乱码表现:- ## 标题二
- - 无xE9xA2条目1
- - 无xEFxBC条目2
- 1. 有序xE3x80目1
- 1. 有序条目2
复制代码
作者: Fit 时间: 2022-1-27 20:12
@echo off
for /f "delims=" %%a in ('dir /a-d /s /b *.txt') do (
findstr . "%%a">tmp
move tmp "%%a"
)
试试(空格行好像去不了)
作者: muihiuwev 时间: 2022-1-27 20:36
本帖最后由 muihiuwev 于 2022-1-27 20:40 编辑
再提个新需求:
通过二楼脚本完成删除空行后,如何在标题前添加一行空行?即除了文档第一行,后面如果是以 # 开头,则在该行前添加空行。
例:- # 标题一
- 内容
- ## 标题二
- 内容
- ### 标题三
复制代码
变为:- # 标题一
- 内容
-
- ## 标题二
- 内容
-
- ### 标题三
- 内容
复制代码
作者: for_flr 时间: 2022-1-28 11:24
- function work{
- $new=@()
- (gc $args[0]) |?{$_.trim() -ne ""} |%{
- if(($_ -match "^#.*标题.*") -and ($flag)){
- $new+="`r`n$_"
- }else{$new+="$_"}
- if(!$flag){$flag=1}
- }
- sc $args[1] $new
- }
- get-childitem -recurse -include *.txt|%{
- $rn=$_.fullname.replace($_.basename,"new_"+$_.basename)
- work $_ $rn
- }
复制代码
Powershell
作者: aloha20200628 时间: 2022-1-28 13:00
纯P版的去空行及空格行的句式》 findstr /v /b /r /c:"^ *$" "有空行和空格行.txt" > "无空行和空格行.txt"
@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%F in ('dir/s/b/a-d *.txt') do (
set/a n=0
(for /f "delims=" %%s in (' findstr /v /b /r /c:"^ *$" "%%F" ') do (
set "ss=%%s" & set/a "n+=1, k=0"
if "!ss:~,1!" equ "#" if !n! gtr 1 set/a "k=1"
if !k! equ 1 (echo,&echo,%%s) else (echo,%%s)
))>"%%F.new.txt"
)
作者: muihiuwev 时间: 2022-2-14 05:12
回复 4# for_flr
运行报错:- '?{$_.trim' 不是内部或外部命令,也不是可运行的程序
- 或批处理文件。
复制代码
作者: muihiuwev 时间: 2022-2-14 05:16
回复 5# aloha20200628
运行后文档内部分文字乱码,另外如何不另存为新文档?
作者: for_flr 时间: 2022-2-14 09:38
回复 6# muihiuwev
在第一行加上- #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
复制代码
作者: muihiuwev 时间: 2022-2-16 18:28
本帖最后由 muihiuwev 于 2022-2-16 18:39 编辑
回复 8# for_flr
仍然报错,如下:- sc : 未能找到路径“D:\DigitalZone\PMS2\08.知识\new_商业\new_商业.md”的一部分。
- 所在位置 行:10 字符: 1
- + sc $args[1] $new
- + ~~~~~~~~~~~~~~~~
- + CategoryInfo : ObjectNotFound: (D:\DigitalZone\..._商业\new_商业.md:String) [Set-Content], Directory
- NotFo undException
- + FullyQualifiedErrorId : GetContentWriterDirectoryNotFoundError,Microsoft.PowerShell.Commands.SetContentCommand
复制代码
看报错提示,脚本连文件夹都重命名了?
另外,脚本新建的的文档内某些文字会变成乱码。
除了想解决以上问题,还希望能够直接修改原文档而不是另存为新文档。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |