【问题标题】:How to differentiate between system and user files in the batch language?如何区分批处理语言中的系统文件和用户文件?
【发布时间】:2017-07-17 18:17:02
【问题描述】:

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

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

我曾想过使用创建日期来确定文件是否为系统文件,但始终没有奏效。

【问题讨论】:

  • 如果您执行 dir /q ,所有 NT AUTHORITY\SYSTEM 文件都是您正在谈论的系统文件,还是包括 BUILTIN\Administrators 文件

标签: file batch-file computer-science


【解决方案1】:

您可以使用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 盘复制到 Drive 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 文件相同的副本。

【讨论】:

  • 那么代码:for /R "C:\" %%G in (*.rtf *.txt) do copy "%%G" "D:\E" 会怎样?可能是一个基本问题,但我现在只是在学习批处理。
  • 很高兴能帮上忙!
  • 嗨,Geister,我刚刚运行代码,发现复制了一些 System32/SysWOW64 文本文件,这些不是系统文件/只是 System32 中的一些文件系统文件吗?
  • 我只能使用命令帮助下的内容。在命令提示符下运行 dir /?。它会和我说的一样。我根本不是 Windows 系统/文件专家...
猜你喜欢
  • 2015-12-15
  • 1970-01-01
  • 2015-03-08
  • 2011-10-10
  • 1970-01-01
  • 2016-09-04
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多