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

时间:2017-02-27 08:06:47

标签: file batch-file computer-science

我希望复制C盘上的所有文本文件,但程序需要避免作为系统一部分的文本文件,并且只复制用户创建的文本文件。

是否有内置方法可以做到这一点,还是我需要发挥创意?如果是这样,你会怎么做呢?我想将它保持在批量内,而不涉及PowerShell或类似的东西。

我考虑过使用创建日期来确定文件是否是系统文件,但这并不是一直有效。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

xcopy命令应该是这样的:

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

修改

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

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

@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命令的输出重定向到userprofile中的文件(通常为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文件相同的副本。