如果找到重复,则返回forfiles结果

时间:2018-01-27 09:25:56

标签: batch-file

我不知道如何解决我的问题,但这就是我要做的事情:

  • 我想在目录中搜索重复项(来自输入)
  • 然后获取重复文件的数量
  • 在这里我被卡住了,如果没有重复的文件,它应该回显"没有找到重复的文件",我的想法是使用{{1 }}
  • 我很困惑我应该把它放在哪里因为我循环了结果。
  • 要直接,如果没有重复的文件[文件名]那么它应该回显"没有找到重复的文件"。

这就是我的所作所为:

>nul|set fileError="No duplicate files found"

更新:为了澄清我想要的内容,如果结果大于1,我的批处理文件应该返回重复文件列表,如果返回列表只有一个那么它应该回显#34;没有找到重复文件& #34;

1 个答案:

答案 0 :(得分:0)

根据我的评论,这里有一些例子。

首先使用<RSAKeyValue><Modulus>mlDk9dIwcGJ+sS7kCOiG/xr/1RkM7v7/bUExalwSj7Q/Ul575l4cUGR1ZjC3BtEgmMZjW6xSRTCkgp0WMpdnXGmygV0mQbrAP32NTGoMoWgjTIevBbd+yOMfY8E87bUG0sYUA8+Wk55iEPk3O0Ua5FiLNWIqGTbrF2A5iSp1voc=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue> 方法和preg_match('/\[\{([^\]\}]+)\}\]/', $varx, $match);

ForFiles

delayed expansionFor /F "Delims==" %%A In ('"(Set file[) 2>Nul"') Do Set "%%A=" Set "i=0" SetLocal EnableDelayedExpansion For /F "Delims=" %%A In ( 'ForFiles /P "%filePath%" /S /M "%fileName%" /C "Cmd /C Echo @Path" 2^>Nul' ) Do Set /A i+=1 & Set "file[!i!]=%%~A" If %i% Equ 0 Echo File %fileName% not found in %filePath% & GoTo End If %i% Equ 1 Echo No duplicates of %fileName% found in %filePath% & GoTo End For /L %%A In (1 1 %i%) Do Echo [%%A]!file[%%A]! :End Pause For /F一起使用:

Dir

您也可以使用delayed expansion代替For /F "Delims==" %%A In ('"(Set file[) 2>Nul"') Do Set "%%A=" Set "i=0" SetLocal EnableDelayedExpansion For /F "Delims=" %%A In ('Dir /B /S /A-D "%filePath%\%fileName%" 2^>Nul' ) Do Set /A i+=1 & Set "file[!i!]=%%A" If %i% Equ 0 Echo File %fileName% not found in %filePath% & GoTo End If %i% Equ 1 Echo No duplicates of %fileName% found in %filePath% & GoTo End For /L %%A In (1 1 %i%) Do Echo [%%A]!file[%%A]! :End Pause 将其行Where更改为:

Dir

您可以将4更改行For /F "Delims=" %%A In ('"Where /R "%filePath%" "%fileName%" 2>Nul"' 用于以下两行:

RoboCopy

或者可能4选项将行Set "RCO=/S /L /XJ /R:0 /FP /NS /NC /NP /NDL /NJH /NJS" For /F "Tokens=*" %%A In ('RoboCopy "%filePath%" Null "%fileName%" %RCO%' 更改为:

For /R

4版本有点奇怪,因为它必须使用通配符,虽然这可能有问题但是如果你怀疑你的文件是否有For /R "%filePath%" %%A In ("%fileName%?" 或者For /R延期; (它应该匹配)