一行代码,将目录a下的所有文件,提取出唯一内容,复制到b文件夹下(select distinct file content from folder a into folder b)
for /r a\ %%i in (*) do (set /p="set filename="<nul>temp.bat & certutil -hashfile "%%i" MD5 | find /v ":" >>temp.bat & echo if not exist "b\%%filename%%" copy /y "%%i" "b\%%filename%%">>temp.bat & call temp.bat)
知识点一:
如何遍历目录下的所有文件?
for /r 目录 %%i in (筛选) do (echo %%i就是文件路径)
如何获取目录下的文件列表?
dir /a:-d /b /s
知识点二:
如何让echo不换行?
set /p="aaaa"<nul>>s.txt
参考自https://www.jb51.net/article/53022.htm
知识点三:
如何获取文件的md5值?
certutil -hashfile 文件 MD5
该命令返回的结果为:
MD5 的 E:\test\a\2.txt 哈希:
c81e728d9d4c2f636f067f89cc14862c
CertUtil: -hashfile 命令成功完成。
知识点四:
如何用find命令筛选字符串?
本例中经观察可以发现第二行没有冒号,1和3却有,所以查找没有冒号的行即可,使用/v选项:
find /v ":" 文件
知识点五:
如何将命令行输出结果保存到变量?
一般都是利用临时文件,本例在for循环中不知何故,测试没有成功,所以采用了类似拼sql语句再执行的方式。
echo 123>s.txt
set /P filename=<s.txt
echo %filename%