1 问题

在windows批处理文件bat文件使用xcopy复制文件或者文件夹时经常会出现以下提示,

E:\Git\xxx>xcopy CMakeLists.txt .\linux_compile\CMakeLists.txt /f /y
目标 E:\Git\xxx\xxx\CMakeLists.txt 是文件名
还是目录名
(F = 文件,D = 目录)?

这是因为xcopy没有办法判断复制的是文件还是文件夹,导致每次我们都要手动输入F或者D进行确认,如果要复制的文件或者文件夹数量少,还可以接受,如果需要复制的数量比较多,手都会按麻。

2 解决方法

2.1 如果复制的是文件

一般的,我们使用xcopy复制文件使用以下命令

xcopy .\CMakeLists.txt .\src\CMakeLists.txt /f /y

为了去掉提示我们可以修改成以下命令

echo f| xcopy .\CMakeLists.txt .\src\CMakeLists.txt /f /y

2.2 如果复制的是文件夹

一般的,我们使用xcopy复制文件夹使用以下命令

xcopy .\CMakeLists .\src\CMakeLists /s /e /f /y

在复制文件夹时出现以上提示,一般是由于目标文件夹末尾没有加\,我们可以将上述命令修改如下

xcopy .\CMakeLists .\src\CMakeLists\ /s /e /f /y

或者按照2.1节的方法,修改为

echo d| xcopy .\CMakeLists .\src\CMakeLists /s /e /f /y