改进Windows批处理脚本

时间:2014-04-30 08:43:41

标签: search batch-file windows-server-2003

以下脚本搜索文件夹及其子文件夹,然后将其获取的每个文件与第二个文件夹中的文件进行比较。如果发现它回显了一条消息,说明找到了该文件。

我的问题是如何增强此脚本以在第二个文件夹及其子文件夹中搜索第一个目录中找到的文件?我只关心带扩展名的文件名(我不关心它找到了哪个文件夹/子文件夹,只是存在重复文件并导致编译器错误)

我认为其中一种方法是将所有文件名输出到文件中,然后将文件作为第二部分的输入并循环到第二个文件夹,但我确信必须有一个更清洁的方式。

O / S:Windows 2003

:bof
    rem @echo off
    cls
    setlocal
:init
    set dirA=X:\tst\pfsrc\
    set dirB=X:\tst\cbsrc\
    if not exist "%dirA%" echo dirA not found & goto :EOF
    if not exist "%dirB%" echo dirB not found & goto :EOF
    for /f "delims=" %%I in ('dir /b /a:-d /s "%dirA%" 2^>NUL') do if exist "%dirB%%%~nxI" echo %%~nxI does exist in "%dirB%" 
:eof

2 个答案:

答案 0 :(得分:1)

此摘录将尝试在递归%%a的所有目录中找到%dirB%

for /d /r %%d in (%dirB%\*) do (
  if exist "%%d\%%~nxa" echo %%d\%%~nxa
)

答案 1 :(得分:0)

感谢您让我走上正确的轨道:-)现在代码正常工作

:bof
    @echo off
    cls
    setlocal
:init
    set dirA=X:\tst\pfsrc\
    set dirB=X:\tst\cbsrc\
    if not exist "%dirA%" echo dirA not found & goto :EOF
    if not exist "%dirB%" echo dirB not found & goto :EOF
    for /f "delims=" %%I in ('dir /b /a:-d /s "%dirA%" 2^>NUL') do for /r "%dirB%" %%d in (%%~nxI) do if exist "%%d" echo %%d
:eof