【问题标题】:Batch trim characters at the EOL在 EOL 处批量修剪字符
【发布时间】:2013-06-02 11:17:09
【问题描述】:

我想创建一个批处理文件,该文件通过目录中的 txt 文件和其中包含 #EXTINF 的每一行,删除最后 15 个字符..

基本上,如果可能的话,我想从任何长于某个数字的行中修剪最后 15-20 个字符。由于某种原因,我有一个软件,如果线路太长,它会搞砸数据。

谢谢

【问题讨论】:

  • 您知道这是两个完全不同的问题吗?你想解决哪一个?如果您说“删除最后 15-20 个字符”,我们不知道该怎么办!
  • 另外,#EXTINF 可能是要删除的文本的一部分吗?有时?总是?从来没有?
  • 嗨@Aacini。谢谢你的回复。我需要脚本遍历目录中的所有文件,并且以#extinf 开头的每一行,从末尾删除XX 个字符。出于某种原因,如果该行的字符数超过 600,我的脚本会输出错误数据。
  • 为什么只删除最后的 XX 个字符就可以了?它们不也很重要吗?他们为什么会在那里?
  • 所以您的意思是,只要一行以#extinf 开头,您只想保留前 600 个字符?

标签: batch-file eol trim


【解决方案1】:

有关使用 Windows 批处理修改文本文件的各种选项,请参阅 How can you find and replace text in a file using the Windows command-line environment?

以下简单代码使用REPL.BAT 截断以#extinf 开头的长行(不区分大小写),长度为600 个字符。少于 600 个字符的行将完整保留。

type test.txt|repl.bat "^(#extinf.{593}).*$" "$1" I>test.txt.new
move /y test.txt.new test.txt >nul

【讨论】:

  • 看起来不错。有没有机会知道如何保存非英文字符?这些文件里面有希伯来语,新的输出文件把它们搞砸了。我添加了 CHCP 1255,但没有帮助
  • @user2314297 - 这是出乎意料的。我对包含所有 255 个 ANSI 字节代码的文件进行了测试,发现没有损坏。您的文件是 ANSI 还是 Unicode?我没有对 Unicode 进行任何测试 - 如果必须在 REPL.BAT 中进行更改以支持 Unicode,我不会感到震惊。
  • TYPE 命令默认将内容转换为ANSI。消除 TYPE 和管道并替换为重定向将保留 unicode 输入,但 REPL.BAT 不是为了支持 unicode 而编写的。我不知道支持 unicode 需要进行哪些更改。
  • 如果我删除 TYPE & Pipe 并离开重定向,我如何告诉脚本只处理 test.txt 文件?
  • 我将输出文件转换为 unicode (UTF8) 后,效果很好。所以问题是如何以 UTF 8 输出文件
【解决方案2】:

User231429 写道:“我需要脚本遍历目录中的所有文件,并且以#extinf 开头的每一行,从末尾删除XX 个字符。”

下面的批处理文件正是这样做的:

@echo off
setlocal EnableDelayedExpansion

for %%f in (*.txt) do (
   (for /F "usebackq delims=" %%a in ("%%f") do (
      set "line=%%a"
      if "!line:~0,7!" equ "#extinf" set "line=!line:~0,-XX!"
      echo !line!
   )) > "%%~Nf.new"
)

REM del *.txt
REM ren *.new *.txt

请注意,您必须将长 if 命令中的 XX 替换为数字。

测试这个程序并检查 *.NEW 文件中的结果。如果结果正确,则从最后两行中删除 REM 部分。

此程序从文件中删除感叹号。如果需要,这个细节可能会被修复。

【讨论】:

  • 检查这个。知道如何添加行检查,以便只修剪超过 600 个字符的行吗?
  • 使用set "line=!line:~0,600!" 而不是set "line=!line:~0,-XX!"。这会将行缩短到最多 600 个字符,但如果它少于 600 个字符,则保持原样。
  • 似乎有效。知道如何支持 unicode 吗?当我将批处理文件保存为 utf8 时,它会破坏输出文件。我需要它来支持希伯来语
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
相关资源
最近更新 更多