批处理脚本将文件夹中的所有文件列出到文本文件而不复制

batch script to list all the files in a folder to a text file without duplicating

我正在尝试编写一个简单的批处理脚本来重命名、移动和存储程序的崩溃日志文件。日志文件使用日期戳和时间戳命名,因此最终结果是一个包含许多具有不同 date/time 戳的日志文件的文件夹。然后我想在列表中列出该文件夹的内容。我能够做到以下几点:

dir /b >> list.txt

问题在于此方法每次创建新日志文件时都会列出文件夹中的所有文件。例如,我在一个文件夹中有以下日志文​​件:

log1
log2
log3

程序崩溃后,会创建一个新的日志文件 log4,当脚本为 运行 时,列表显示如下:

log1
log2
log3
log1
log2
log3
log4

有没有办法只将新的日志文件附加到我的列表中?

您正在使用双 >> 追加,但您可以简单地使用一个 > 来覆盖文件。如果您不想实际 排除 结果列表中的任何文件,这可能是最简单的方法。

我同意@Daniel 和@Eric 的观点,在我的脑海中,我想不出一个场景,你不能使用 > redirect...

如果出于某种原因需要,您可以这样做:

@echo off
if not exist list.txt type nul>list.txt

for /f "tokens=*" %%a in ('dir /b') do call :findDuplicate "%%a"
goto:eof

:findDuplicate
type list.txt | find %1>nul
if %ERRORLEVEL% EQU 0 (
   :: file already in list.txt, so don't append
   goto:eof
   ) else (
   :: file wasn't found, append to list.txt
   echo %~1 >> list.txt
   )
goto:eof