Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 无法使用xcopy从子文件夹复制更新的文件_Batch File - Fatal编程技术网

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

Batch file 无法使用xcopy从子文件夹复制更新的文件,batch-file,Batch File,上面的脚本不复制子文件夹文件。我应该修改什么 我想用脚本将当前创建日期的文件和当天更新的任何以前的文件复制到其他驱动器文件夹,包括具有相同目录结构的文件夹。但它应该只存储当前日期和更新文件 更新脚本(根据@BaliC的要求) 正如@Andriy正确指出的,您正在循环执行dir命令的输出,并且每次都设置文件,而不对其进行任何操作,因此它只会用下一个文件覆盖变量,因此您只剩下输出中的最后一个文件 这应该行得通 set "source=C:\Documents and Settings\kalim\M

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


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

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


正如@Andriy正确指出的,您正在循环执行
dir
命令的输出,并且每次都设置文件,而不对其进行任何操作,因此它只会用下一个文件覆盖变量,因此您只剩下输出中的最后一个文件

这应该行得通

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%\"
) 
在测试时,当使用
/e
开关打开文件时,我确实有一个关于循环复制的错误,但请先看看这是否有效

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

更新

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

只要去掉它们,它就像一个符咒:)


尽管您似乎在请求文件列表(使用
dir/a-D/OD/B
),但您只存储了一个名称,可能是列表中的最后一个名称。您只需为最后存储的名称运行一次
xcopy
。这可能是你的问题吗?至于姓氏,它应该从子文件夹中复制所有具有该名称的文件。(在我的测试中也是如此。)试着在末尾放一个
暂停
,看看是否有错误?我想编写脚本,将当前创建的日期文件和当天更新的任何以前的文件复制到其他驱动器文件夹,包括具有相同目录结构的文件夹。但它应该只存储当前日期和更新文件……用于/f“tokens=*”%%f in('dir/A-D/OD/B')Do(set file=%%f xcopy/s/D/e“%source%\%file%”“%dest%”)此脚本显示无效路径…但当我在我的脚本上面运行时,它工作正常..我们脚本之间的唯一区别是您的
%dest%
末尾有一个尾随斜杠,不确定它是否会产生影响,但是试试%dest%\好吗?你能把你现在使用的整个脚本放到你的问题中,让我看看吗?从视觉上更容易看出哪里出了问题。
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%\"
) 
for /f "tokens=*" %%f in ('dir /A-D /OD /B') Do (
set file=%%f
xcopy /s /d /e "%source%\%file%" "%dest%"
)
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%"
)