我给自己写了一个简单的任务,编写一个批处理文件,它将执行以下操作:
将“first”文件夹中每个文件的CRC32与“second”文件夹中的每个文件进行比较。输出必须是“第一个”文件夹中每个文件的名称,该文件在“秒”中没有重复。
注意:“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
)
我认为此代码中存在多个错误,但我无法找到它们。所以,如果有人有时间,并认为他可以提供帮助,我将不胜感激。
如果您认为需要采用不同的方法,请随时展示。
答案 0 :(得分:0)
有两个主要问题。
Goto的内部支架不能按预期工作,它们会立即停止循环,因此您的代码将在那里失败。
解决方案是避免goto
或调用函数并在那里使用goto
。
第二个问题是比较
if one==two (
始终为false,因为它会将单词one
与单词two
进行比较,但不会将变量的内容进行比较。
通常你会使用if "%one%"=="%two%" echo equal
,但因为它应该在括号内工作,你需要延迟扩展,所以它看起来像。
if !one!==!two! echo equal
在使用
开始循环之前,不要忘记启用延迟扩展setlocal EnableDelayedExpansion
答案 1 :(得分:0)
使用类似的东西可能更容易捕获crc32的输出:
for /f %%x in ('crc32 "%filename%" -nf ^| find /v "CRC32"') do stuff with %%x
如果没有帮助,你能告诉我crc32示例的完整输出吗?