0
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%\"
) 
4

1 回答 1

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%"
)
于 2013-01-10T09:43:59.173 回答