批处理文件 DIR 命令到文本文件而不覆盖

Batch File DIR Command to Text File Without Overwrite

我正在尝试保留备份到外部驱动器上的文件的日期,以防万一由于某种原因日期被弄乱(我以前有过丢失日期信息的经历并且没有备份)。我正在通过包含以下内容的批处理文件执行此操作:

@ECHO OFF
cd E:\PCBackup
dir /s > dirlist.txt

在使用 FreeFileSync 运行备份我的备份后,我会简单地 运行 这个批处理文件。然后,如果需要,我可以在 txt 文件中搜索文件名并查看其对应的日期。

但是,当这个批处理文件 运行s 时,如果有以前的 dirlist.txt,那么它会被新的 dirlist.txt 覆盖。因此,在日期被弄乱而我还没有意识到的情况下,如果我 运行 这个批处理文件,它将用日期被弄乱的批处理文件覆盖之前的 dirlist.txt,而且我会丢失日期信息!

所以,我想我想让它做的是,如果 dirlist.txt 已经存在,那么创建一个新的,比如 dirlist1.txt,这样我就可以有几个“备份”必要时我可以手动删除的文本文件。

我看到可以使用 >>dir /s >> dirlist.txt 之类的东西来附加到现有文件而不是覆盖,但如果我不这样做,我不想附加不得不,我还是想创建一个新文件。

有没有办法做到这一点?如果有的话,我也愿意接受 alternative/simpler 保留日期的方法。请记住,除了我多年前参加的计算机科学课程外,我对 CMD 命令或编程知之甚少。谢谢。

你会被告知有无数重复的方法可以做到这一点,所以在 1 世纪的第 22 年 :-) Windows 没有返回顺序 Iso Date 的本地方法 主要答案是使用 powershell 并且对于我的语言环境,需要以合适的格式调用它,引入延迟。

powershell get-date -format "{yyyy-MMM-ddTHH_mm+01Z}" 

注意:- 冒号 : 是不允许的,对我来说,20 秒后在一台机器上(但它确实会随着使用而变得更快)和 12-5 秒后在这台机器上,我得到 2021-07-07T21_55+01Z 但实际上现在是 2021 年 7 月 7 日 21:56

我发现 MakeCab method 更快、更可靠,但格式也不是纯排序的,Jul 不会出现在文件列表中的 Dec 之前重要的批处理文件处理。

2021-Dec-31 23:00:00.txt
2021-Jul-08 21:54:20.txt

所以在 .cmd 中,我更喜欢即时结果,因此 我的时钟设置为国际日期(您需要查看右下角的 LOCALE 时钟设置以适合您自己的日期建筑。)

set isodate=%date:~0,10%

立即returns isodate=2021-07-07 然后我可以将其用于文件名

@ECHO OFF
cd E:\PCBackup
set "isodate=%date:~0,10%"
dir /s > %isodate%-dirlist.txt

目录 returns 包括 2021-07-07-dirlist.txt

如果您想在一天内运行几次,请使用

@ECHO OFF
cd E:\PCBackup
set "isodate=%date:~0,10%"
set "isotime=%time:~0,2%-%time:~3,2%-%time:~6,2%"
dir /s > %isodate%T%isotime%+01Z-dirlist.txt

修改您希望的时区的任何方式,因此您自己的时钟无论您的日期格式是什么:-

31/2021/12

看我拆分的方式%time :~ start@base 0 , # of chars %-

“英语”时钟的一个示例 日期 31/12/2021 将简单地反转为 "isodate=%date:~6,4%-%date:~3,2%-%date:~0,2%"

对于美国人 %date%=Thu 07/08/2021 使用

"isodate=%date:~10,4%-%date:~4,2%-%date:~7,2%"