【问题标题】:Compare in windows command prompt在 Windows 命令提示符下进行比较
【发布时间】:2014-03-05 16:37:54
【问题描述】:

说明:
我想使用类似 COMP I:\folder1 Z:\folder2 的语法来比较我的 I 驱动器中的所有文件与我的 z 驱动器的内容。我只需要比较他们的名字,看看是否存在另一个。我需要递归到子目录,因为两个驱动器中都有很多子目录,我知道我需要使用 FOR 循环以及 PUSHD 和 POPD 命令的批处理脚本。

问题:
我该怎么做?

【问题讨论】:

  • 今天,我也写了同样的一句话,但无论如何……有什么理由不使用robocopy吗?您可以指示它完成所有工作,而无需复制任何文件。

标签: windows batch-file cmd


【解决方案1】:

来自 FOR /? 的输出?

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

    Walks the directory tree rooted at [drive:]path, executing the FOR
    statement in each directory of the tree.  If no directory
    specification is specified after /R then the current directory is
    assumed.  If set is just a single period (.) character then it
    will just enumerate the directory tree.

所以你会做类似的事情

@echo off
setlocal enabledelayedexpansion ENABLEEXTENSIONS

for /R P:\ %%F in (*.*) DO (
set fileFull=%%~fF
set filePath=%%~pF
set fileDrive=%%~dF
set fileName=%%~nF
set fileExtension=%%~xF
call :checker "!filePath!" "!fileName!" "!fileExtension!"
) 
goto :eof

:checker
set fileTarget="c:%~1%~2%~3"
if not exist %fileTarget% echo %fileTarget% not found
goto :eof

在这种情况下,脚本会获取 P:\ 及其子目录中的所有文件名,并告诉我该文件是否不存在于 C: 中的同一路径中

【讨论】:

    【解决方案2】:

    在树上列出文件夹差异:

    这使用 robocopy 创建列表 - 不要删除 /L,因为此开关使 robocopy 仅列出信息。

    robocopy "d:\source\folder one" "c:\target\folder two" /L /fp /njs /njh /ndl /ns /np /mir
    

    【讨论】:

      【解决方案3】:

      如果您确实需要避免使用第三方实用程序:

      @ECHO OFF
      SET FOLDER1=I:\Folder1\
      SET FOLDER2=Z:\Folder2\
      ECHO SET FNAME=%%1 ^& @ECHO %%FNAME:%FOLDER1%=%%^>^>FILES1.TXT>FILES1.BAT
      ECHO SET FNAME=%%1 ^& @ECHO %%FNAME:%FOLDER2%=%%^>^>FILES2.TXT>FILES2.BAT
      IF EXIST FILES1.TXT DEL FILES1.TXT
      IF EXIST FILES2.TXT DEL FILES2.TXT   
      FOR /F "tokens=*" %%* IN ('DIR /S /B /ON "%FOLDER1%"') DO CALL FILES1.BAT "%%*"
      FOR /F "tokens=*" %%* IN ('DIR /S /B /ON "%FOLDER2%"') DO CALL FILES2.BAT "%%*"
      ECHO Files from "%FOLDER1%" which are not found in "%FOLDER2%"
      FOR /F "tokens=*" %%* IN (FILES1.TXT) DO (FIND %%* FILES2.TXT >NUL || ECHO %%*)
      ECHO Files from "%FOLDER2%" which are not found in "%FOLDER1%"
      FOR /F "tokens=*" %%* IN (FILES2.TXT) DO (FIND %%* FILES1.TXT >NUL || ECHO %%*)
      

      【讨论】:

        猜你喜欢
        • 2015-04-28
        • 2012-07-07
        • 2019-01-11
        • 1970-01-01
        • 2014-12-18
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2013-06-17
        相关资源
        最近更新 更多