gpt4 book ai didi

batch-file - 使用批处理文件删除重复的文本行

转载 作者:行者123 更新时间:2023-12-01 10:37:00 30 4
gpt4 key购买 nike

我正在创建一个文本文件,显示文件夹中每个文件的文件扩展名。我想去掉重复项,因为它会为每个文件创建一行文本。

经过一番搜索后,我发现我应该使用 findstr 将初始文件覆盖为删除了特定扩展名的新版本(在我将其写入过滤后的文件之后)。

for %%A in (*.*) do echo %%~xA >> initial.txt
for /F %%B in (initial.txt) do (
echo %%B >> filtered.txt
for /F %%C in (initial.txt) do findstr /v %%C initial.txt > initial.txt
)

但它将初始文件留空(如预期),同时仍将每一行复制到 filtered.txt 文件。我很乐意提供一些帮助。

最佳答案

您可以立即创建文件filtered.txt,不需要initial.txt:

> "filtered.txt" rem/
for %%A in ("*.*") do (
> nul find /I "%%~xA" "filtered.txt"
if ErrorLevel 1 (
>> "filtered.txt" echo %%~xA
)
)

我在这里使用 find 而不是 findstr 因为只搜索简单的文字字符串。 find(如 findstr)如果至少遇到一个匹配项,则将 ErrorLevel 设置为 0,并将 >1 如果没有找到。

根据返回的ErrorLevel%%~xA中当前迭代的文件扩展名是否回显并重定向到filtered.txt .因此,如果 filtered.txt 已经包含当前项目,则不会回显,但如果没有遇到匹配项,则会将项目附加到文件中。

第一行创建一个空文件 filtered.txt 用于 find 第一次执行不会失败。


如果您无论如何都想使用文件 initial.txt,您可以执行以下操作:

>> "initial.txt" (
for %%A in ("*.*") do echo %%~xA
)
> "filtered.txt" rem/
for /F "usebackq eol=| delims=" %%A in ("initial.txt") do (
> nul find /I "%%~xA" "filtered.txt"
if ErrorLevel 1 (
>> "filtered.txt" echo %%~xA
)
)

这段代码和上面的差不多;唯一的区别是预先创建了 initial.txt(可能包含重复项),以及对其内容的枚举(通过 for/F)而不是直接枚举当前目录.

关于batch-file - 使用批处理文件删除重复的文本行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33599735/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com