2013-07-24 30 views
0

我想遞歸地比較2個文件夾,並在其中找到丟失的文件。我正在使用for循環來比較2個文件夾,但無法搜索子文件夾。有人可以幫忙嗎?批處理腳本遞歸循環子目錄,並找到2個文件夾中的丟失文件

這裏是我試過的代碼,

@echo off 
if "%2" == "" GOTO Usage 

cd /D %1 
if errorlevel 1 goto usage 

for %%x in (*.*) do if NOT exist %2\%%x echo missing %2\%%x 
cd /D %2 
for %%x in (*.*) do if NOT exist %1\%%x echo missing %1\%%x 

goto end 

:usage 
echo Usage %0 dir1 dir2 
echo where dir1 and dir2 are full paths 
:end 
+0

也許我們可以幫助,如果你會提供一些代碼.... – Endoro

+0

請使用編輯功能,並把代碼在您的問題。評論框中的代碼不可讀。謝謝。 – Endoro

+0

在問題中添加代碼..我會嘗試你的代碼..謝謝! –

回答

1

嘗試這一點,解釋見代碼中的註釋:

@ECHO OFF &SETLOCAL 
SET "folder1=this" 
SET "folder2=that" 

REM delete variables 
FOR /f "delims==" %%a IN ('set "$"') DO SET "%%a=" 

REM scanning folder1 
FOR /r "%folder1%" %%a IN (*) DO SET "$%%~nxa=%%~a" 

REM compare with folder2 
FOR /r "%folder2%" %%a IN (*) DO (
    IF NOT DEFINED $%%~nxa ECHO missing IN %folder1%: %%a 
) 

REM delete variables 
FOR /f "delims==" %%a IN ('set "$"') DO SET "%%a=" 

REM scanning folder2 
FOR /r "%folder2%" %%a IN (*) DO SET "$%%~nxa=%%~a" 

REM compare with folder1 
FOR /r "%folder1%" %%a IN (*) DO (
    IF NOT DEFINED $%%~nxa ECHO missing IN %folder2%: %%a 
) 

ECHO Done. 
0
@ECHO OFF 
SETLOCAL 
XCOPY /l /y /d "%~1\*" "%~2\*"|FIND "\" 
XCOPY /l /y /d "%~2\*" "%~1\*"|FIND "\" 
GOTO :EOF 

嚴格,其中列出了在文件一個目錄但不在另一個目錄中;列出那些以及那些存在於兩者中但具有不同時間戳的那些。

/s添加到XCOPY選項也可以掃描子目錄。

相關問題