1

我给自己一个简单的任务,就是编写一个批处理文件,该文件将执行以下操作:

将“第一个”文件夹中每个文件的 CRC32 与“第二个”文件夹中的每个文件进行比较。输出需要是“第一个”文件夹中每个文件的名称,该文件夹在“第二个”文件夹中没有重复项。

注意:“CRC32.exe -nf”在第一行输出 CRC32,在第二行输出文件大小。

这是我尝试这样做的方法:

@echo off

for %%i in ("%cd%\first\*.*") do (
    set uniq=0
    for /f %%x in ('crc32 %%i -nf') do (
        set one=%%x
        goto find_two
    )
    :find_two
    for %%j in ("%cd%\second\*.*") do (
        for /f %%x in ('crc32 %%j -nf') do (
            set two=%%x
            goto compare
        )
        :compare
        if one==two (
            goto next
        ) else (
            set uniq=1
        )
    )
    if uniq==1 (
        echo %%i >>result.txt
    )
    :next
)

我认为这段代码中存在几个错误,但我很难找到它们。因此,如果有人有时间,并且认为他可以提供帮助,我将不胜感激。

如果您认为需要不同的方法,请随时展示它。

4

2 回答 2

0

有两个主要问题。

Goto 的内部括号没有按预期工作,它们立即停止循环,因此您的代码将在那里失败。
解决方案是避免goto或调用函数并在goto那里使用。

第二个问题是比较。
if one==two (将始终为假,因为它将 wordone与 word进行比较two,而不是变量的内容。

通常你会使用if "%one%"=="%two%" echo equal,但由于它应该在括号内工作,你需要延迟扩展,所以看起来像。

if !one!==!two! echo equal

在开始循环之前不要忘记启用延迟扩展

setlocal EnableDelayedExpansion
于 2013-02-07T20:20:09.990 回答
0

使用类似这样的方法可能更容易捕获 crc32 的输出:

for /f %%x in ('crc32 "%filename%" -nf ^| find /v "CRC32"') do stuff with %%x

如果这没有帮助,你能告诉我一个示例 crc32 的完整输出吗?

于 2013-02-07T20:22:49.470 回答