[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 求助批处理如何遍历文件夹下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
复制代码

@echo off
for /f "delims=" %%a in ('dir /a-d /s /b *.txt') do (
        findstr . "%%a">tmp
        move tmp "%%a"
)

试试(空格行好像去不了)
1

评分人数

    • muihiuwev: 感谢给帖子标题标注[已解决]字样技术 + 1
Fit Strong

TOP

本帖最后由 muihiuwev 于 2022-1-27 20:40 编辑

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

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

TOP

  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

TOP

纯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"
)

TOP

回复 4# for_flr


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

TOP

回复 5# aloha20200628


    运行后文档内部分文字乱码,另外如何不另存为新文档?

TOP

回复 6# muihiuwev


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

TOP

本帖最后由 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
复制代码
看报错提示,脚本连文件夹都重命名了?
另外,脚本新建的的文档内某些文字会变成乱码。

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

TOP

返回列表