Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/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
Cmd 用于验证xcopy是否已复制所有文件的方法_Cmd_Directory_Compare - Fatal编程技术网

Cmd 用于验证xcopy是否已复制所有文件的方法

Cmd 用于验证xcopy是否已复制所有文件的方法,cmd,directory,compare,Cmd,Directory,Compare,在使用xcopy复制整个目录之后,我想验证是否复制了所有文件,因为这似乎经常失败。我试图通过循环遍历源目录中的每个文件,然后检查它是否存在于目标目录中来实现这一点 我有一些东西似乎在我的机器上工作,但在构建机器上似乎不工作,这就是我需要它的地方 @echo off set /a count=0 set /a count2=0 for /r "C:\work\DLS\built\Android_EU\data" %%f in (*) do (set /a count+=1 ) for /r "C

在使用xcopy复制整个目录之后,我想验证是否复制了所有文件,因为这似乎经常失败。我试图通过循环遍历源目录中的每个文件,然后检查它是否存在于目标目录中来实现这一点

我有一些东西似乎在我的机器上工作,但在构建机器上似乎不工作,这就是我需要它的地方

@echo off
set /a count=0
set /a count2=0
for /r "C:\work\DLS\built\Android_EU\data" %%f in (*) do (set /a count+=1
)

for /r "C:\work\DLS\TegraProject\DLS\assets" %%f in (*) do (set /a count2+=1
)

echo count is %count%
echo count 2 is %count2%

if %count%==%count2% echo equal
if not %count%==%count2% echo not equal

pause

if %count%==%count2% exit 0
if not %count%==%count2% exit 1
我手动检查,两台机器上的两个文件夹中都有594个文件

在我的机器上报告正确

在构建机器上,它说有583和584个文件。是否有任何原因会跳过文件

谢谢


克里斯。

试试这个:它最多可以处理
2^31-1个
文件。:)


好的,这似乎奏效了-谢谢@foxidrive的输入

cd C:\work\DLS\built\Android_EU\data
dir /s /b /a-d |find /c /v "" > temp.txt
set /p count=<temp.txt
cd C:\work\DLS\TegraProject\DLS\assets\data
dir /s /b /a-d |find /c /v "" > temp.txt
set /p count2=<temp.txt

echo count is %count%
echo count 2 is %count2%

pause

if %count%==%count2% exit 0
if not %count%==%count2% exit 1
cd C:\work\DLS\builded\Android\u EU\data
dir/s/b/a-d | find/c/v”“>temp.txt
设置/p计数=temp.txt

set/p count2=任何基本复制命令在其他程序中打开或锁定的文件上都会失败。但是,如果您使用的是Xcopy替代品
Robocopy
,那么它会在末尾提供一个摘要来显示统计数据。感谢您的回复。我用Robocopy替代了它,它似乎已经连续工作了好几次。我可能弄错了,但我很确定我昨天在尝试机器人技术,而且它也不总是有效的。不管怎样,我认为这将是一个很好的练习来进行复制后验证。Robocopy将为您提供摘要,并设置一个您可以检查的错误级别。如果要手动确认,如果文件已复制但为零字节,您将怎么做?您需要什么级别的检查?谢谢@foxidrive。我想出了一些办法,但它似乎在某台机器上不起作用,我也不知道为什么。我已编辑了我的问题。请使用
dir/b/a-d | find/c/v”“
谢谢@foxidrive重新检查机器上的文件数。使用该代码,在我的机器上返回2和1,在构建机器上返回3和1:-/。我有一个替代方法,它似乎可以工作,所以我现在就发布它。这现在也可以计算子目录中的文件。如果直接从构建机器运行,这似乎可以工作-robocopy成功,我的验证成功,当我手动检查时,有594个文件。但当我试图通过持续集成软件Bambol调用脚本时,robocopy成功,我的验证成功,但当我手动检查时,只有不到594个文件:-/。您显示的代码不会产生不同的答案。这些文件夹是否处于活动状态并正在更改?必须有一个很好的理由——就像其他过程一样,将文件放入或删除它们。谢谢@foxidrive。他们最终会的,但我会单独检查。如果我手动查看,那么在我测试的时候,两个目录中都有595个文件。当我用代码运行批处理文件时,值是正确的(595和595)。当我运行带有代码的批处理文件时,值为3和1。我不确定会有什么区别,但似乎确实有区别。但是,即使使用我的代码,使用Bambol似乎仍然存在一个问题,即文件没有被复制,但所有验证都成功,但这必须是一个完全独立的问题:-/。我没有提到数据文件夹中有多个子目录,但这可能会对您的代码产生影响?例如:C:\work\DLS\TegraProject\DLS\assets\data\anims C:\work\DLS\TegraProject\DLS\assets\data\models\player\body等
cd C:\work\DLS\built\Android_EU\data
dir /s /b /a-d |find /c /v "" > temp.txt
set /p count=<temp.txt
cd C:\work\DLS\TegraProject\DLS\assets\data
dir /s /b /a-d |find /c /v "" > temp.txt
set /p count2=<temp.txt

echo count is %count%
echo count 2 is %count2%

pause

if %count%==%count2% exit 0
if not %count%==%count2% exit 1