为什么 xcopy 的 /f 选项会影响排除文件中的空格?

为什么 xcopy 的 /f 选项会影响排除文件中的空格?

我曾经问过这个问题并得到了一个看似不可能正确的答案,但我尝试了一下并且它成功了!

如何选择/f,根据文档

复制时显示完整的源文件和目标文件名称

可能导致EXCLUDE文件中要识别的空格?! 这种效果似乎与 的目的完全无关/f

答案1

听起来 /f 不仅影响显示,还影响用于匹配排除字符串的文件名数据。也许您对“显示”的解释过于严格 :-)。

但请认真考虑,文档编写者可能并不总是预见到在使用他们的工具时不同选项可能会如何相互作用。换句话说,这种行为可能不是设计使然,但它仍然有效。

答案2

我之前给你的答案是错误的,你的想法是错误的。/f 标志不会影响空格的处理方式,但会影响路径的处理方式。

如果您运行不带 /f 标志的 xcopy,您会发现它适用于相对于工作目录或您指定的路径的文件。显然,xcopy 的内部逻辑也使用了这一点,因此当您默认运行它时,它只能过滤您在复制命令中指定的路径部分。

当您添加 /f 标志时,xcopy 将显示文件的完整路径,无论您如何调用复制。由于这似乎会影响内部逻辑,因此这也使得可以过滤文件的完整路径,而不仅仅是相对路径。

xcopy 的当前文档中没有对此进行解释,这让您相信它只会影响显示而不会影响内部逻辑。

您可以使用以下内容亲自测试一下。

创建文件夹 c:\unicorns 和文件夹 c:\ponys 在 unicorns 文件夹中,创建三个文件:test1.txt、test2.txt 和 exclude.txt 编辑 exclude.txt 并粘贴以下内容

test1.txt
c:\unicorns\test2.txt

转到 c:\unicorns 并运行命令

xcopy *.txt ..\ponys /exclude:exclude.txt

你会看到它复制了 test2.txt 和 exclude.txt 现在添加 /f 标志,如下所示

xcopy /f *.txt ..\ponys /exclude:exclude.txt

您会注意到,这次它只复制 exclude.txt。

在这个例子中,我们的工作目录是 c:\unicorns,因此显示的名称只包含文件名。

我们可以继续这样做,并展示使用绝对路径会发生什么。使用与之前相同的目录设置并运行命令

xcopy c:\unicorns\*.txt c:\ponys /exclude:c:\unicorns\exclude.txt

现在您可以看到唯一复制的文件是 exclude.txt。通过在命令中提供绝对路径,它们将在内部逻辑中使用,并可进行过滤。

如果您尝试使用 /f 标志,您会注意到它们的工作方式相同

xcopy /f c:\unicorns\*.txt c:\ponys /exclude:c:\unicorns\exclude.txt

我希望这可以清楚地解释它目前的工作原理。

相关内容