【问题标题】:How to exclude a file type in XCOPY without passing a file?如何在不传递文件的情况下在 XCOPY 中排除文件类型?
【发布时间】:2020-10-02 19:28:57
【问题描述】:

我的 C 盘中有 5 个 txt 文件,比如说

result_1.0.1.txt
result_1.0.1_tmp1.txt
result_1.0.1_tmp2.txt
result_1.0.1_tmp3.txt
result_1.0.1_tmp4.txt

在任何时候,只有 1 个有效的结果 txt 文件(在本例中为 result_1.0.1.txt)和多个 tmp 文件。我只想使用通用 XCOPY 命令复制 result_1.0.1.txt。文件中的版本号每次都可以不同。之前,只有 result_<version>.txt 文件曾经存在,所以我的 XCOPY 命令看起来像这样

xcopy /Y "C:\*.txt" result.txt

要排除“tmp”文件,XCOPY 需要一个文件名作为 /EXCLUDE 参数的参数。取而代之的是,有没有办法传递通配符参数?像这样 -

xcopy /Y "C:\*.txt" /EXCLUDE:"*tmp*" result.txt

【问题讨论】:

  • 您可以使用robocopy,它是 Windows 10 的原生工具/命令,它支持通配符(*?)来排除文件使用/xf <FileName> 选项。请参阅 Robocopy 的 File selection options 中的 /x*/xf。如果您对使用 Robocopy 感兴趣,我可以为您的案例添加一个带有示例的答案。

标签: windows copy copy-paste xcopy


【解决方案1】:

根据here 的解释,您需要使用要排除的模式创建一个新文件。不能使用通配符。

所以你可以创建一个文件exclusions.txt(在不同的目录中),内容如下:

_tmp

就是这样。

然后就可以运行了

xcopy /Y "C:\*.txt" /EXCLUDE:exclusions.txt result.txt

您还可以像在this Super User answer 中那样动态生成exclusions.txt

或者,如果您的文件名将始终采用您所显示的确切格式,您可以完全跳过使用EXCLUDE,而是使用类似的内容:

xcopy /Y "C:\*.?.txt" result.txt

? 是一个单字符通配符,因此它将匹配任何以.1.txt.2.txt 等结尾的文件,而您的tmp 文件没有这些文件。您甚至可以更具体地使用*.?.?.txtresult*.?.?.txt

【讨论】:

  • 我觉得使用基于正则表达式的方法更可靠直到文件名的模式保持不变。它可以帮助解决可能出现的问题,以防正在读取的要排除的内容文件损坏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2018-06-26
  • 2015-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多