批处理语言如何区分系统文件和用户文件?

How to differentiate between system and user files in the batch language?

我想复制C盘所有的文本文件,但是程序要避开系统自带的文本文件,只复制用户自己创建的文本文件。

是否有内置方法可以做到这一点,或者我需要发挥创意吗?如果是这样,你会怎么做?我想将它保留在批处理中,而不涉及 powershell 或类似的东西。

我想过使用创建日期来判断一个文件是否是系统文件,但一直没有奏效。

您可以使用 dir 命令生成所有系统文件的列表。所以

dir /b /as > %USERPROFILE%\excluded_Files.txt

将从该目录生成系统文件列表。

按照描述使用 xcopy here 您现在可以将所有文件从一个目录复制到另一个目录,不包括系统文件。

xcopy 命令应该是这样的:

xcopy C:\firstDirectory\*.txt C:\secondDirectory /EXCLUDE:%USERPROFILE%\excluded_Files.txt

编辑

所以您的代码会将所有 rtf 和 txt 文件从整个 C 驱动器复制到驱动器 D 文件夹 E。

使用我的方法的批处理文件如下所示:

@echo off
cd /d C:\
dir /b /as /s > %USERPROFILE%\excluded_Files.txt
xcopy C:\*.rtf D:\E /EXCLUDE:%USERPROFILE%\excluded_Files.txt /s
xcopy C:\*.txt D:\E /EXCLUDE:%USERPROFILE%\excluded_Files.txt /s

解释:
@echo off 禁止在执行前显示的命令的冗余输出。
cd /d C:\ 将当前执行目录更改为C盘根目录。 /d 为潜在的驱动器更改添加。
dir /b /as /s > %USERPROFILE%\excluded_Files.txt 将 dir 命令的输出重定向到用户配置文件中的一个文件(通常是 C:\Users\yourUserName)。开关 /b 将只显示文件名,而不显示大小、创建日期等。/as 将只列出系统文件,/s 使 dir 命令在所有目录中递归工作。
xcopy C:\*.rtf D:\E /EXCLUDE:%USERPROFILE%\excluded_Files.txt /s 会将所有 rtf 文件从 C:\ 复制到 D:\E 并从先前创建的列表中排除所有文件(将包含所有系统 txt rtf 文件(如以及其他))。 /s 使 xcopy 像 dir 一样递归工作。
下一行是与 txt 文件相同的副本。