Board logo

标题: [文本处理] 【已解决】怎样判断文本中指定字符后有没有换行符? [打印本页]

作者: smss    时间: 2019-6-27 11:31     标题: 【已解决】怎样判断文本中指定字符后有没有换行符?

本帖最后由 smss 于 2019-6-28 10:13 编辑

判断1.txt文本中>后没有换行符则添加换行符 如果有换行符号则不添加
注意是怎样判断 不是怎样替换
作者: WHY    时间: 2019-6-28 09:26

  1. $str = [IO.File]::ReadAllText('1.txt', [Text.Encoding]::Default) -replace '>(?!\r\n)', ">`r`n";
  2. [IO.File]::WriteAllText('2.txt', $str, [Text.Encoding]::Default)
复制代码

作者: smss    时间: 2019-6-28 10:41

本帖最后由 smss 于 2019-6-28 12:56 编辑

回复 2# WHY
  1. cd /d "%~dp0"
  2. PowerShell "$s=[IO.File]::ReadAllText('1.txt', [Text.Encoding]::UTF8) -replace ''', '''' -replace '>(?!\r\n)', "">`r`n""";[IO.File]::WriteAllText('2.txt', $s, [Text.Encoding]::UTF8)"
复制代码
可是双引号转义需要这样 同上次说的有点不同
有没有比较全面的转义教学推荐呢 非常感谢!
直接运行一点事没有 但是加了延迟就不行了
  1. @echo off&SetLocal EnableDelayedExpansion
  2. ::此处有其它需要环境延迟的代码 需要再次关闭 真的坑 有木有 不知道大神都是怎样解决的
  3. setlocal disabledelayedexpansion
  4. PowerShell "$s=[IO.File]::ReadAllText('1.xml', [Text.Encoding]::UTF8) -replace ''', '''' -replace '>(?!\r\n)', "">`r`n""";sc 8.xml $s -Enc UTF8"
复制代码
再次感谢你的帮助
作者: WHY    时间: 2019-6-28 16:14

回复 3# smss


    双引号就是这样转义的,有什么问题?
这样写的话,首先需要考虑 PowerShell 引号字符转义,还要考虑批处理特殊字符的转义。
字符的转义不可能一慨而论,需要具体问题具体分析。

开启变量延迟后,感叹号需要转义:
PowerShell "... -replace '>(?^!\r\n)', \"^>`r`n\"; sc 8.xml $s -Enc UTF8"




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