无法使用xcopy从子文件夹复制更新的文件

时间:2013-01-10 05:19:04

标签: batch-file

set "source=C:\Documents and Settings\My Documents\msword"
set "dest=D:\Test"

pushd "%source%" ||(
   echo.Source does not exist&pause&goto EOF)

for /f "tokens=*" %%f in (
   'dir /A-D /OD /B') Do set "file=%%f"

popd

xcopy /s /d /e "%source%\%file%" "%dest%\" 

以上脚本不复制子文件夹文件。我应该修改什么?

我想编写脚本,将当前日期创建的文件和同一天更新的任何以前的文件复制到其他驱动器文件夹,包括相同的目录结构。但它应该只存储当前日期和更新文件......

更新的脚本(根据@BaliC的要求)

set "source=C:\Documents and Settings\kalim\My Documents\msword"
set "dest=D:\Test"
pushd "%source%" || ( echo.Source does not exist & pause & goto EOF)
for /f "tokens=*" %%f in ('dir /A-D /OD /B') Do (
xcopy /s /d /e "%source%\" "%dest%\"
) 

1 个答案:

答案 0 :(得分:0)

正如@Andriy正确指出的那样,你循环遍历dir命令的输出,并且每次都设置文件而不对它做任何事情,所以它只是用下一个文件覆盖变量,所以你留下了输出中的最后一个文件。

这应该有效

for /f "tokens=*" %%f in ('dir /A-D /OD /B') Do (
set file=%%f
xcopy /s /d /e "%source%\%file%" "%dest%"
)

测试时,在文件上使用/e开关时,确实有关于循环复制的错误,但只是看看它是否先工作。

同样仅供将来参考,/e开关与/s /e相同,因此您不需要/s

更新

您的脚本没有复制文件的原因是因为xcopy不喜欢源和目标路径上的尾部斜杠,并且它们不会将它们识别为路径。

只需删除它们就像魅力一样:)

set "source=C:\Documents and Settings\kalim\My Documents\msword"
set "dest=D:\Test"
pushd "%source%" || ( echo.Source does not exist & pause & goto EOF)
for /f "tokens=*" %%f in ('dir /A-D /OD /B') Do (
xcopy /s /d /e "%source%" "%dest%"
)