创建一个批处理文件来备份指定的文件夹
问题描述:
我其实对这个批处理文件来说很新。我知道至少知道基本命令是很重要的。我如何执行以下操作?创建一个批处理文件来备份指定的文件夹
- 压缩指定的文件夹。
- 将文件夹移至其他位置。
- 当压缩它时,ZIP文件的名称将是当前日期,如果还有另一个压缩文件具有相同的名称,则应该命名为20090924-2。
PS:7-Zip作为存档软件安装在我的电脑上。
答
下面列出的批处理脚本将做到这一点(我已经测试了它 ,它符合规范)。移动的目录被指定为其父目录并且名称为 目录(PARENT_FOLDERTOZIP和FOLDERTOZIP在 开头) - 我无法弄清楚如何复制整个 目录(我认为XCOPY只能复制内容 目录和子目录。)。复制位置是指定为FOLDERTARGETLOCATION的 ,并且将压缩文件放在 中的目录指定为ZIPDIR。
7-Zip的位置通过SEVENZIP_EXE进行配置。
还要注意,以要求的 格式获取当前日期取决于区域 设置中的短日期格式。我列出了 ISO-8601,中欧和美国的三种不同版本。 列表中的活动版本适用于美国(“set FDATE =”行)。如果需要另外一个 ,则只需从另一个 中的一个复制粘贴。
这就是说,应该指出的是,这种事情是非常 更容易Perl,Python或PowerShell。
@echo off
@title=Folder zip and move...
rem Parameters
rem Folder to zip and move
set PARENT_FOLDERTOZIP=T:\to delete
set FOLDERTOZIP=Folder to Compress
rem Target folder for moving the input folder to.
set FOLDERTARGETLOCATION=s:\move Here
rem Where to place compressed folders
set ZIPDIR=D:\toDelete\2009-09-24a
rem Configuration
set SEVENZIP_EXE=D:\Program Files\7-Zip\7z.exe
rem =================== Date ==============================================
rem There is no universal way inside batch itself to get a
rem date that is independent of regional settings (but is
rem quite trivial if an external program or script
rem (Perl/Python) is available).
rem
rem For short date formats:
rem
rem -------------------------------------------------------
rem
rem ISO-8601:
rem
rem yyyy-MM-dd/ E.g.: 2009-09-24
rem
rem set FDATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
rem
rem -------------------------------------------------------
rem
rem Central european:
rem
rem dd/MM/yyyy E.g.: 24/09/2009
rem
rem set FDATE=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
rem
rem -------------------------------------------------------
rem
rem US:
rem
rem
rem MM/dd/yyyy E.g.: 09/24/2009
rem
rem set FDATE=%DATE:~6,4%%DATE:~0,2%%DATE:~3,2%
set FDATE=%DATE:~6,4%%DATE:~3,2%%DATE:~0,2%
set ZIPFILE=%ZIPDIR%\%FDATE%.7z
set FOLDERTOZIP_FULLPATH=%PARENT_FOLDERTOZIP%\%FOLDERTOZIP%
mkdir %FOLDERTARGETLOCATION%
rem Does a zip file already exist?
if exist "%ZIPFILE%" GOTO L_ZIPFILE_EXISTS
GOTO L_ZIPFILENAME_OK
rem Find a compressed file that does not already exist.
:L_ZIPFILE_EXISTS
set RNUM=0
:L_TRYANOTHER
set /a RNUM=%RNUM% + 1
set ZIPFILE=%ZIPDIR%\%FDATE%-%RNUM%.7z
echo Candidate: %ZIPFILE% ...
if exist "%ZIPFILE%" GOTO L_TRYANOTHER
rem Zip the folder!
:L_ZIPFILENAME_OK
"%SEVENZIP_EXE%" a %ZIPFILE% "%FOLDERTOZIP_FULLPATH%"
if exist "%ZIPFILE%" GOTO L_OKZIP
GOTO L_ERROREND
:L_OKZIP
rem Move folder: copy, then delete source.
set DEST_FOLDER=%FOLDERTARGETLOCATION%\%FOLDERTOZIP%
mkdir "%DEST_FOLDER%"
xcopy /Y /S "%FOLDERTOZIP_FULLPATH%"\*.* "%DEST_FOLDER%"\
rmdir /S "%FOLDERTOZIP_FULLPATH%"
GOTO L_END
:L_ERROREND
echo 7-Zipping failed !!!
:L_END
pause
+0
非常感谢。 – Tarik 2009-09-25 16:26:09
是*您没有时间的注释*为轻度刺激性,但我没有时间回复。 – pavium 2009-09-24 22:12:47
@pavium:对不起( – Tarik 2009-09-24 23:08:08