【问题标题】:How to Remove the empty row in a txt file with batch如何批量删除txt文件中的空行
【发布时间】:2023-01-11 04:10:58
【问题描述】:

在这方面需要一些帮助,我确实理解批处理会将一个空行添加到 txt 文件的末尾

但我需要暂时删除它,以便我的下一个脚本可以运行

我已经尝试了 3 种不同的方法来完成这项工作,但无法弄清楚

这是我的剧本

@echo off

FOR %%i IN ("Toedit\Ready.txt") do (
findstr /V "^$" "%%i" >> "%%i.tmp"
    >>"%%i.tmp" echo  ,
    del "%%i"
    ren "%%i.tmp" "%%~nxi"
)

我也试过这样做

for /f "usebackq tokens=* delims=" %%a in ("Ready.txt") do (echo(%%a)>>~.txt
move /y  ~.txt "Ready.txt"

但是最后的结果是一样的

这是我的Ready.txt文件内容

"dfhg": [
   1,
   2,
   10,
   4,
   8,
   9,
   3,
   6,
   7,
   5
empty space

我的坏结果

"dfhg": [
   1,
   2,
   10,
   4,
   8,
   9,
   3,
   6,
   7,
   5
,
empty space

我的最终结果

"dfhg": [
   1,
   2,
   10,
   4,
   8,
   9,
   3,
   6,
   7,
   5,
empty space

我知道批处理会创建一个空白空间,我对此表示满意,但我确实需要将其删除,以便我可以添加 ,

【问题讨论】:

  • 没有空行被添加到文本文件的末尾。默认情况下,每个 Windows 文本文件都使用回车符和换行符对来终止一行。这两个隐藏字符是由 echo 命令引入的,而不是由批处理文件引入的。如果您不需要它们,请不要使用 echo 命令。这个站点上已经有很多问题向您展示了如何只使用 Unix LF 终止符或根本不使用终止符而不是使用 CRLF 对来写入文件。您的问题并不表示您已尝试寻找示例或介绍他们的任何技术。
  • 请注意,文本编辑器可以在文件末尾附加字符。如果文本文件的最后一行以行终止符结尾(Windows 上默认为回车 + 换行符),使用命令时就是这种情况回声并将其输出重定向到一个文件中,这并不意味着有一个空行。文本编辑器只允许在文本文件的最后一个字符之后附加更多字符,在本例中是换行符。对于读取文本文件的程序,文件末尾没有空行。
  • 最后确实强烈推荐线在一个文本文件中也有一个线路终端否则许多程序无法正确处理细绳在文件末尾。我想这是一个 XY problem 描述。数组的最后一个元素之后不能有逗号,看起来您要在此处使用批处理文件创建该元素。批处理文件应使用命令行编写,输出数组的最后一个数组元素,不带逗号,所有其他数组元素行带逗号。

标签: batch-file


【解决方案1】:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
rem The following settings for the directories and filenames are names
rem that I use for testing and deliberately includes spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.

SET "sourcedir=u:your files"
SET "destdir=u:your results"
SET "filename1=%sourcedir%q75073481.txt"
SET "outfile=%destdir%outfile.txt"

SET "prevline="

(
FOR /f "usebackqdelims=" %%e IN ("%filename1%") DO (
 IF DEFINED prevline ECHO !prevline!
 SET "prevline=%%e"
)
ECHO !prevline!,
)>"%outfile%"

FC "%filename1%" "%outfile%"

GOTO :EOF

在应用于真实数据之前,请始终对照测试目录进行验证。

请注意,如果文件名不包含空格等分隔符,则可以省略 usebackq%filename1% 周围的引号。

只需将上一行保存在一个变量中,如果下一行存在则将其输出。

最后,输出最后一行并附加一个逗号。

注意:彻底测试源文件可能包含符号,尤其是!%

【讨论】:

    【解决方案2】:

    这是我想到的第一个想法,它使用 PowerShell 并且应该删除最后一行终止符。

    @%SystemRoot%System32WindowsPowerShell1.0powershell.exe -NoProfile -Command "$t = [IO.File]::ReadAllText(".ToeditReady.txt"); [IO.File]::WriteAllText(".ToeditReady.txt", $t.TrimEnd())"
    

    删除该行终止符后,第一个字符 echoed 到它,(我假设,在这种情况下,逗号), 将作为文件中的下一个可见字符附加,即它将变为 5,CRLF,而不是您的“Bad Results”5CRLF,CRLF

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      相关资源
      最近更新 更多