Windows 批处理:使用CRC32比较文件
我给了自己一个简单的任务,编写一个批处理文件,该文件将执行以下操作: 比较“第一”文件夹中每个文件的CRC32与“第二”文件夹中每个文件的CRC32。输出需要是“first”文件夹中每个文件的名称,该文件夹在“second”中没有重复项 注意:“CRC32.exe-nf”在第一行输出CRC32,在第二行输出文件大小 下面是我如何尝试的:Windows 批处理:使用CRC32比较文件,windows,file,batch-file,compare,crc32,Windows,File,Batch File,Compare,Crc32,我给了自己一个简单的任务,编写一个批处理文件,该文件将执行以下操作: 比较“第一”文件夹中每个文件的CRC32与“第二”文件夹中每个文件的CRC32。输出需要是“first”文件夹中每个文件的名称,该文件夹在“second”中没有重复项 注意:“CRC32.exe-nf”在第一行输出CRC32,在第二行输出文件大小 下面是我如何尝试的: @echo off for %%i in ("%cd%\first\*.*") do ( set uniq=0 for /f %%x in (
@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
)
我假设这段代码中存在几个错误,但我很难找到它们。因此,如果有人有时间,并且认为他能帮助我,我将不胜感激
如果您认为需要不同的方法,请随意展示。有两个主要问题 Goto的内部括号不能按预期工作,它们会立即停止循环,因此您的代码将在那里失败。
解决方法是避免
goto
或调用函数并在那里使用goto
第二个问题是比较。if one==two(
将始终为false,因为它将单词one
与单词two
进行比较,但不比较变量的内容
通常情况下,如果“%one%”==“two%”echo equal,您会使用,但由于它应该在括号内工作,您需要延迟扩展,因此它看起来像
if !one!==!two! echo equal
在开始循环之前,不要忘记启用延迟扩展
setlocal EnableDelayedExpansion
使用以下内容可能更容易捕获crc32的输出:
for /f %%x in ('crc32 "%filename%" -nf ^| find /v "CRC32"') do stuff with %%x
如果没有帮助,你能告诉我一个例子CRC32的完整输出吗?< /P>我使用<代码> Goto 的唯一原因是因为C++中没有<代码>破解<代码>,但是我不知道它不仅会打破嵌套循环,而且所有这些都是。我已经根据你的指令修改了脚本,现在看起来像是是:。但我仍然得到与以前相同的错误:“)此时不是预期的。”感谢您的帮助jeb。多亏了你,我意识到打破嵌套循环是主要的问题,我四处搜索,找到了如何做到这一点。这就是代码现在的样子,它按预期工作: