如何批量删除 CSV 文件中不以正斜杠结尾的整行?

如何批量删除 CSV 文件中不以正斜杠结尾的整行?

我有一个 CSV 文件,由于它包含文件路径和目录路径,因此太大。我需要对其进行修改,使其仅显示目录路径,而不显示文件本身。

我想知道是否可以相当直接地创建一个“拖放”批处理脚本,如果行末尾不包含正斜杠,则删除该行,因为文件路径在单元格的末尾不包含正斜杠,所以这是唯一可用的共同点。

Desired action:
If end with forward slash = keep row
If not end with forward slash = delete entire row

在此处输入图片描述

答案1

你可以试试:

  • 命令行:
cd /d "D:\Full\Path\To\" & type "File.csv" |findstr /e \/ >"Output.csv"
  • 文件.cmd/.bat:
@echo off

type "%~dpnx1"|findstr /e \/ >"%~dp1Output.csv"

答案2

这不是批处理,但是,如果您愿意使用 Excel 解决方案,它就会起作用。

使用 E 列作为辅助列。假设第一行是标题行,则将此公式添加到E2

=RIGHT(D2)="/"

这将返回 TRUE 或 FALSE。复制/粘贴该公式,无论您的数据有多长。按 E 列排序。现在,所有以 结尾的行都/分组在一起,其他所有行也分组在一起。这样可以轻松地将所有其他行选为一个组并删除它们。

答案3

假设 D 列是最后一列,并且 CSV 未使用引号将" "字符串括起来,这将创建第二个文件,其中仅包含以 结尾的行/。您必须更改文件名以匹配您的数据。如果您想就地进行更改,可以添加一些行以删除旧数据并将新数据重命名为相同的名称。

@echo off
for /f "tokens=*" %%a in (dataInput.csv) do call :processline %%a
goto :eof

:processline
set line=%*
set last=%line:~-1%
IF "%last%"=="/" ECHO %line% >> dataOutput.csv

goto :eof

:eof

如果您的数据在字符串周围有引号(或可能有),则必须为此添加一些额外的处理。您可以提取最后两个,如果最后一个是",则检查倒数第二个。

答案4

如果 CSV 文件中的文本行确实以斜杠结尾,则以下批处理命令将仅提取没有该斜杠的行:

findstr /v "^.*/$" input.csv > output.csv

参考 :查找字符串

相关内容