Board logo

标题: [文本处理] 求助批处理如何遍历文件夹下markdown文件并删除空行 [打印本页]

作者: muihiuwev    时间: 2022-1-27 16:54     标题: 求助批处理如何遍历文件夹下markdown文件并删除空行

预期:遍历文件夹下包括子文件夹下所有markdown文件,查找并删除所有空行,保存退出。

例:
修改前:
  1. ## 标题二
  2. - 无序条目1
  3. - 无序条目2
  4. 1. 有序条目1
  5.   
  6. 1. 有序条目2
复制代码
修改后:
  1. ## 标题二
  2. - 无序条目1
  3. - 无序条目2
  4. 1. 有序条目1
  5. 1. 有序条目2
复制代码
如上,删除单行或连续空行,包括含空格的空行,不用跳过特定行不删除,不用另存为新文件。

在论坛找了一圈,找到一个能用的,但运行后某些字符会变成乱码。命令如下:
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d/s/b *.txt') do (
  3. (for /f "delims=" %%b in ('type "%%a"') do echo;%%b)>tmp
  4. move tmp "%%a"
  5. )
复制代码
乱码表现:
  1. ## 标题二
  2. - 无xE9xA2条目1
  3. - 无xEFxBC条目2
  4. 1. 有序xE3x80目1
  5. 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 编辑

再提个新需求:
通过二楼脚本完成删除空行后,如何在标题前添加一行空行?即除了文档第一行,后面如果是以 # 开头,则在该行前添加空行。

例:
  1. # 标题一
  2. 内容
  3. ## 标题二
  4. 内容
  5. ### 标题三
复制代码
变为:
  1. # 标题一
  2. 内容
  3. ## 标题二
  4. 内容
  5. ### 标题三
  6. 内容
复制代码

作者: for_flr    时间: 2022-1-28 11:24

  1. function work{
  2. $new=@()
  3. (gc $args[0]) |?{$_.trim() -ne ""} |%{
  4.   if(($_ -match "^#.*标题.*") -and ($flag)){
  5.      $new+="`r`n$_"
  6.      }else{$new+="$_"}
  7.   if(!$flag){$flag=1}
  8.   }
  9. sc $args[1] $new
  10. }
  11. get-childitem -recurse -include *.txt|%{
  12. $rn=$_.fullname.replace($_.basename,"new_"+$_.basename)
  13. work $_  $rn
  14. }
复制代码
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


运行报错:
  1. '?{$_.trim' 不是内部或外部命令,也不是可运行的程序
  2. 或批处理文件。
复制代码

作者: muihiuwev    时间: 2022-2-14 05:16

回复 5# aloha20200628


    运行后文档内部分文字乱码,另外如何不另存为新文档?
作者: for_flr    时间: 2022-2-14 09:38

回复 6# muihiuwev


  
在第一行加上
  1. #@&cls&powershell "type '%~0'|out-string|iex"&pause&exit
复制代码

作者: muihiuwev    时间: 2022-2-16 18:28

本帖最后由 muihiuwev 于 2022-2-16 18:39 编辑

回复 8# for_flr


仍然报错,如下:
  1. sc : 未能找到路径“D:\DigitalZone\PMS2\08.知识\new_商业\new_商业.md”的一部分。
  2. 所在位置 行:10 字符: 1
  3. + sc $args[1] $new
  4. + ~~~~~~~~~~~~~~~~
  5.     + CategoryInfo          : ObjectNotFound: (D:\DigitalZone\..._商业\new_商业.md:String) [Set-Content], Directory
  6. NotFo    undException
  7.     + FullyQualifiedErrorId : GetContentWriterDirectoryNotFoundError,Microsoft.PowerShell.Commands.SetContentCommand
复制代码
看报错提示,脚本连文件夹都重命名了?
另外,脚本新建的的文档内某些文字会变成乱码。

除了想解决以上问题,还希望能够直接修改原文档而不是另存为新文档。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2