Board logo

标题: 如何用批处理批量保存系统盘中除系统自带以外的文件?? [打印本页]

作者: youkkk     时间: 2007-3-1 09:12    标题: 如何用批处理批量保存系统盘中除系统自带以外的文件??
由于经常帮别人重装系统.有时PC的主人出去了忘了说要保存系统盘中什么什么文件....导致做系统的时候很郁闷......:(

题目如上~谢谢~

作者: qasa     时间: 2007-3-1 10:00
要是机主没说要保留什么文件的话,你怎么知道要保留什么呀?
不过一般都是几个地方:

1、桌面

2、收藏夹

3、我的文档

批处理可这样写:

@echo off
echo 正在备份,请稍候......
md d:\backup&md d:\backup\桌面&md d:\backup\收藏夹&md d:\backup\我的文档
xcopy "%userprofile%"\"My Documents"\. d:\backup\我的文档\ /s /y /e >nul 2>nul
xcopy "%userprofile%"\桌面\. d:\backup\桌面\ /s /y /e >nul 2>nul
xcopy "%windir%"\"Favorites"\. d:\backup\收藏夹\ /s /y /e >nul 2>nul
echo 备份完毕! ! !&pause>nul

作者: youkkk     时间: 2007-3-1 10:04
谢谢二楼的兄弟.
我不一般的....

也许我没有说的详细的原故吧. 我举个例子.比如机主在WINDOWS等比较不常保存文件的文件夹中也存放了文件....上面的就........

作者: qasa     时间: 2007-3-1 10:08
......
这有点像大海捞针的感觉,如果有没指定类型的话,这是不可能,除非有人把原来系统的文件抓了个快照,然后再对比,如果不同就备份出来。
有点难......

作者: slore     时间: 2007-3-1 10:11
我的基本是系统的原始文件
要不要dir给你看看=。=

我知道了!自己建立个假目录,全部都是空txt文档,但是名字和系统文件对应!

然后对系统文件进行复制的时候用if exist 那个目录里的文件是否存在不存在就copy

作者: qasa     时间: 2007-3-1 10:23
我知道了!自己建立个假目录,全部都是空txt文档,但是名字和系统文件对应!

然后对系统文件进行复制的时候用if exist 那个目录里的文件是否存在不存在就copy


不用这样,安装完所有软件后,抓快照最简单的方法,可用:
dir /s /a-d /b >系统快照.txt

然后备份的时候就这个快照对比。


Last edited by qasa on 2007-2-28 at 11:01 PM ]

作者: slore     时间: 2007-3-1 10:44
然后备份的时候就这个快照对比。

你要怎么对比?

作者: slore     时间: 2007-3-1 10:49
试了下fc命令……对生成的对比文件还要再进行处理

作者: qasa     时间: 2007-3-1 11:12
首先生成系统快照:
dir "%windir%" /s /a-d /b >系统快照.txt

备份时快照对比(嘻嘻,慢慢等下吧):
@echo off&setlocal enabledelayedexpansion
set newfile=0
set sum=0
echo 正在扫描备份文件,请稍候......
for /f "delims=" %%i in ('dir /s /a-d /b c:\windows') do (
for /f "delims=" %%j in (系统快照.txt) do (
if %%i equ %%j set newfile=1
)
if !newfile! equ 0 (
copy "%%i" d:\backup\ >nul 2>nul
set newfile=0
set/a sum+=1
)
)
echo.&echo 备份完毕,共有 !sum! 个文件备份成功。&pause>nul


Last edited by qasa on 2007-2-28 at 11:06 PM ]

作者: qasa     时间: 2007-3-1 11:53
有个缺点就是以中文起的文件名就不能备份,不知是什么回事,还得大家帮找下原因。
如:
文档.txt
一.txt
这类文件的都不能备份。

要是如:
a文档.txt
a 文 档.txt
则可以备份。



Last edited by qasa on 2007-2-28 at 10:56 PM ]

作者: youkkk     时间: 2007-3-1 12:16
嘻嘻...离成功越来越近了...兄弟们加油~~


不能沉下去呀..

扫描真的N慢..

Last edited by youkkk on 2007-3-1 at 12:25 PM ]

作者: slore     时间: 2007-3-1 12:45
你有没有比较你的方法和我的方法?

你这个每一个文件就要遍历一边“系统快照.txt”里的每行!
自己想象效率=.=

不知道是不是P的败笔,还是自己学的不够,for命令居然没有退出的。

for /f "delims=" %%j in (系统快照.txt) do (
if %%i equ %%j set newfile=1 <----这里如果相等就退出循环不要再对比后面的每行了
)

而且我做了下测试:

改了下代码(echo和当前目录而已):

@echo off&setlocal enabledelayedexpansion
set newfile=0
set sum=0
echo 正在扫描备份文件,请稍候......
for /f "delims=" %%i in ('dir /s /a-d /b .') do (
for /f "delims=" %%j in (快照.txt) do (
if "%%i" equ "%%j" set newfile=1
echo ^(%%i^) , ^(%%j^)
)
echo %newfile%
if !newfile! equ 0 (
copy "%%i" .\backup\ >nul 2>nul
set newfile=0
set/a sum+=1
)
)
echo.&echo 备份完毕,共有 !sum! 个文件备份成功。&pause>nul



但结果!!

正在扫描备份文件,请稍候......
(C:\Test\1.txt) , (C:\Test\1.txt)
(C:\Test\1.txt) , (C:\Test\2.rtf)
(C:\Test\1.txt) , (C:\Test\3.reg)
0
(C:\Test\2.rtf) , (C:\Test\1.txt)
(C:\Test\2.rtf) , (C:\Test\2.rtf)
(C:\Test\2.rtf) , (C:\Test\3.reg)
0
(C:\Test\3.reg) , (C:\Test\1.txt)
(C:\Test\3.reg) , (C:\Test\2.rtf)
(C:\Test\3.reg) , (C:\Test\3.reg)
0
(C:\Test\备份.bat) , (C:\Test\1.txt)
(C:\Test\备份.bat) , (C:\Test\2.rtf)
(C:\Test\备份.bat) , (C:\Test\3.reg)
0
(C:\Test\快照.txt) , (C:\Test\1.txt)
(C:\Test\快照.txt) , (C:\Test\2.rtf)
(C:\Test\快照.txt) , (C:\Test\3.reg)
0

备份完毕,共有 0 个文件备份成功。


问题有:
第一为什么返回全是0?
因为我的第一个文件相同,所以是1,是1的话就不copy同样也不会被重置为0!!
那么……什么都不用copy了。

所以应该是:

@echo off&setlocal enabledelayedexpansion
set newfile=0
set sum=0
echo 正在扫描备份文件,请稍候......
for /f "delims=" %%i in ('dir /s /a-d /b .') do (
for /f "delims=" %%j in (快照.txt) do (
if "%%i" equ "%%j" set newfile=1
echo ^(%%i^) , ^(%%j^)
)
echo !newfile!
if !newfile! equ 0 (
copy "%%i" .\backup\ >nul 2>nul
set newfile=0
set/a sum+=1
)
set newfile=0
)
echo.&echo 备份完毕,共有 !sum! 个文件备份成功。&pause>nul


这样,虽然可以完成了。

但这个的循环次数真是不可想象!

顺便测试了下上面的提到的文件名问题:
测试结果可以备份。

正在扫描备份文件,请稍候......
(C:\Test\1.txt) , (C:\Test\1.txt)
(C:\Test\1.txt) , (C:\Test\2.rtf)
(C:\Test\1.txt) , (C:\Test\3.reg)
(C:\Test\1.txt) , (C:\Test\一.txt)
(C:\Test\1.txt) , (C:\Test\复件 文 档.txt)
1
(C:\Test\2.rtf) , (C:\Test\1.txt)
(C:\Test\2.rtf) , (C:\Test\2.rtf)
(C:\Test\2.rtf) , (C:\Test\3.reg)
(C:\Test\2.rtf) , (C:\Test\一.txt)
(C:\Test\2.rtf) , (C:\Test\复件 文 档.txt)
1
(C:\Test\3.reg) , (C:\Test\1.txt)
(C:\Test\3.reg) , (C:\Test\2.rtf)
(C:\Test\3.reg) , (C:\Test\3.reg)
(C:\Test\3.reg) , (C:\Test\一.txt)
(C:\Test\3.reg) , (C:\Test\复件 文 档.txt)
1
(C:\Test\一.txt) , (C:\Test\1.txt)
(C:\Test\一.txt) , (C:\Test\2.rtf)
(C:\Test\一.txt) , (C:\Test\3.reg)
(C:\Test\一.txt) , (C:\Test\一.txt)
(C:\Test\一.txt) , (C:\Test\复件 文 档.txt)
1
(C:\Test\二.txt) , (C:\Test\1.txt)
(C:\Test\二.txt) , (C:\Test\2.rtf)
(C:\Test\二.txt) , (C:\Test\3.reg)
(C:\Test\二.txt) , (C:\Test\一.txt)
(C:\Test\二.txt) , (C:\Test\复件 文 档.txt)
0
(C:\Test\备份.bat) , (C:\Test\1.txt)
(C:\Test\备份.bat) , (C:\Test\2.rtf)
(C:\Test\备份.bat) , (C:\Test\3.reg)
(C:\Test\备份.bat) , (C:\Test\一.txt)
(C:\Test\备份.bat) , (C:\Test\复件 文 档.txt)
0
(C:\Test\复件 复件 文 档.txt) , (C:\Test\1.txt)
(C:\Test\复件 复件 文 档.txt) , (C:\Test\2.rtf)
(C:\Test\复件 复件 文 档.txt) , (C:\Test\3.reg)
(C:\Test\复件 复件 文 档.txt) , (C:\Test\一.txt)
(C:\Test\复件 复件 文 档.txt) , (C:\Test\复件 文 档.txt)
0
(C:\Test\复件 文 档.txt) , (C:\Test\1.txt)
(C:\Test\复件 文 档.txt) , (C:\Test\2.rtf)
(C:\Test\复件 文 档.txt) , (C:\Test\3.reg)
(C:\Test\复件 文 档.txt) , (C:\Test\一.txt)
(C:\Test\复件 文 档.txt) , (C:\Test\复件 文 档.txt)
1
(C:\Test\快照.txt) , (C:\Test\1.txt)
(C:\Test\快照.txt) , (C:\Test\2.rtf)
(C:\Test\快照.txt) , (C:\Test\3.reg)
(C:\Test\快照.txt) , (C:\Test\一.txt)
(C:\Test\快照.txt) , (C:\Test\复件 文 档.txt)
0
(C:\Test\文 档.txt) , (C:\Test\1.txt)
(C:\Test\文 档.txt) , (C:\Test\2.rtf)
(C:\Test\文 档.txt) , (C:\Test\3.reg)
(C:\Test\文 档.txt) , (C:\Test\一.txt)
(C:\Test\文 档.txt) , (C:\Test\复件 文 档.txt)
0

备份完毕,共有 5 个文件备份成功。


顺便把我测试的全部文件上传过来:

Last edited by slore on 2007-3-1 at 01:06 AM ]
附件 1: Test.rar (2007-3-1 12:45, 1.14 KiB, 下载附件所需积分 1点 ,下载次数: 6)

作者: youkkk     时间: 2007-3-2 02:47
谢谢几位的热心回复~~...

作者: NaturalJ0     时间: 2007-3-2 02:55
for 我一般使用 GOTO 跳出去。

作者: NaturalJ0     时间: 2007-3-2 03:00
XCOPY source ] ]


...]

source 指定要复制的文件。
destination 指定新文件的位置和/或名称。
/A 只复制有存档属性集的文件,
但不改变属性。

作者: runwater     时间: 2007-3-2 04:05
我爱批处理!