标题: [文件操作] [已解决]批处理怎样对比出两个硬盘下的的不重名文件? [打印本页]
作者: ChenCheChe 时间: 2021-8-11 23:24 标题: [已解决]批处理怎样对比出两个硬盘下的的不重名文件?
bat能不能扫描两个硬盘下的目录和文件,对比出两个硬盘下的的不重名文件夹和文件?
就是有两个硬盘,一个是主盘,一个是冷备份盘。主盘增加或者删除文件后隔一段时间我会手动同步到备份盘。
我希望以主盘为准,扫描出备份盘目录下的文件夹名和文件名(包含后缀)与主盘的不同之处,并且导出结果为txt文件。
希望能有手动指定硬盘和路径的选项!
如图所示:
以主盘I盘为准,根据备份盘E盘的文件与主盘I盘对比,把备份盘与主盘的目录文件夹和文件名的不同之处以txt文件导出来。
先扫描同名目录,再扫描同名目录下的文件。
分别导出“新增加”和“已删除”两个txt文件,
内容是不相同文件夹和文件的路径+文件名(包含后缀)
如果所示,两个txt的内容应为:
“新增加”
I:\1688K
I:\TES\ABC.txt
“已删除”
E:\Kugou
E:\TES\789.txt
作者: idwma 时间: 2021-8-12 00:22
- @echo off
- set a=I:\
- set b=E:\
-
- (for /f "tokens=2 delims=:" %%a in ('dir/b/s %a%') do (
- echo;%%a
- ))>a.txt
- (for /f "tokens=2 delims=:" %%a in ('dir/b/s %b%') do (
- echo;%%a
- ))>b.txt
-
- findstr /v /x /g:a.txt /f:b.txt >add.txt
- findstr /v /x /g:b.txt /f:a.txt >del.txt
-
- (for /f "delims=" %%a in (add.txt) do (
- <nul set/p =%a:~0,-1%&echo;%%a
- ))>新增加.txt
- (for /f "delims=" %%a in (del.txt) do (
- <nul set/p =%b:~0,-1%&echo;%%a
- ))>已删除.txt
-
- del a.txt b.txt add.txt del.txt
- pause
复制代码
作者: Batcher 时间: 2021-8-12 10:05
回复 1# ChenCheChe
推荐使用微软官方的同步软件:SyncToy
作者: idwma 时间: 2021-8-12 14:52
本帖最后由 idwma 于 2021-8-12 15:54 编辑
改一下可以任意路径- @echo off
- set/p "a=路径1:"
- set/p "b=路径2:"
-
- call :n "%a%"
- (for /f "delims=" %%a in ('dir/b/s "%a%"') do (
- set str=%%a
- call;echo;%%str:~%n%%%
- ))>a.txt
- set n=
- call :n "%b%"
- (for /f "delims=" %%a in ('dir/b/s "%b%"') do (
- set str=%%a
- call;echo;%%str:~%n%%%
- ))>b.txt
-
- findstr /v /x /g:b.txt a.txt >add.txt
- findstr /v /x /g:a.txt b.txt >del.txt
-
- (for /f "delims=" %%a in (add.txt) do (
- <nul set/p "=%a%"
- echo;%%a
- ))>"新增加.txt"
- (for /f "delims=" %%a in (del.txt) do (
- <nul set/p "=%b%"
- echo;%%a
- ))>"已删除.txt"
-
- del a.txt b.txt add.txt del.txt
- pause
- goto :eof
-
- :n
- set/a n+=1
- set str=%~1
- call;set nn=%%str:~0,%n%%%
- if not "%nn%"=="%str%" goto :n
- goto :eof
复制代码
作者: ChenCheChe 时间: 2021-8-12 22:33
回复 4# idwma
这个代码刚刚试了一下,没有修改过的文件夹和文件都列了出来。
路径下的全部文件都列了出来!
作者: idwma 时间: 2021-8-13 00:08
本帖最后由 idwma 于 2021-8-13 02:46 编辑
回复 5# ChenCheChe
终究还是要上机呀,脑运不靠谱- @echo off&setlocal enabledelayedexpansion
- set/p "a=路径1:"
- set/p "b=路径2:"
-
- call :n "%b%"
- (for /f "delims=" %%a in ('dir/b/s "%b%"') do (
- set str=%%a
- dir/b "!a!!str:~%n%!">nul 2>nul||echo;!b!!str:~%n%!
- ))>"已删除.txt"
- set n=
- call :n "%a%"
- (for /f "delims=" %%a in ('dir/b/s "%a%"') do (
- set str=%%a
- dir/b "!b!!str:~%n%!">nul 2>nul||echo;!a!!str:~%n%!
- ))>"新增加.txt"
-
- pause
- goto :eof
-
- :n
- set/a n+=1
- set str=%~1
- call;set nn=%%str:~0,%n%%%
- if not "%nn%"=="%str%" goto :n
- goto :eof
复制代码
作者: newswan 时间: 2021-8-13 00:24
用软件比较方便,用批处理比较烧脑
作者: ChenCheChe 时间: 2021-8-13 15:13
回复 6# idwma
谢谢,刚刚试了,已经可以运行使用了,就是有个小小的问题想问问能不能再完美下。
现在这个代码扫描出两边硬盘存在不同名的文件夹后会记录文件夹名和子目录下的所有文件夹和文件。
当这个文件夹内的文件比较多就会卡顿耗费时间,所以我想能不能再修改一下变完美。
如果扫描到两边有不同名的文件夹时,就只记录这个文件夹名,不用再扫描记录这个不同名文件夹下的目录和文件。
作者: idwma 时间: 2021-8-13 17:47
回复 8# ChenCheChe
这个不知道应该怎么跳过,技穷了
作者: ChenCheChe 时间: 2021-8-13 19:13
回复 9# idwma
非常感谢,那这样我想请问下,能不能弄另外一个代码,和帖子一样的要求,但是只扫描记录文件夹,不扫描记录文件的?
这样我就先运行这个扫文件夹的,再运行另外一个。
作者: idwma 时间: 2021-8-13 19:21
回复 10# ChenCheChe - @echo off&setlocal enabledelayedexpansion
- set/p "a=路径1:"
- set/p "b=路径2:"
-
- call :n "%b%"
- (for /f "delims=" %%a in ('dir/ad/b/s "%b%"') do (
- set str=%%a
- dir/ad/b "!a!!str:~%n%!">nul 2>nul||echo;!b!!str:~%n%!
- ))>"已删除.txt"
- set n=
- call :n "%a%"
- (for /f "delims=" %%a in ('dir/ad/b/s "%a%"') do (
- set str=%%a
- dir/ad/b "!b!!str:~%n%!">nul 2>nul||echo;!a!!str:~%n%!
- ))>"新增加.txt"
-
- pause
- goto :eof
-
- :n
- set/a n+=1
- set str=%~1
- call;set nn=%%str:~0,%n%%%
- if not "%nn%"=="%str%" goto :n
- goto :eof
复制代码
作者: ChenCheChe 时间: 2021-8-13 20:02
回复 11# idwma
非常感谢!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |