2009-09-24 81 views
1

我其实对这个批处理文件来说很新。我知道至少知道基本命令是很重要的。我如何执行以下操作?创建一个批处理文件来备份指定的文件夹

  • 压缩指定的文件夹。
  • 将文件夹移至其他位置。
  • 当压缩它时,ZIP文件的名称将是当前日期,如果还有另一个压缩文件具有相同的名称,则应该命名为20090924-2。

PS7-Zip作为存档软件安装在我的电脑上。

+1

是*您没有时间的注释*为轻度刺激性,但我没有时间回复。 – pavium 2009-09-24 22:12:47

+0

@pavium:对不起( – Tarik 2009-09-24 23:08:08

回答

4

下面列出的批处理脚本将做到这一点(我已经测试了它 ,它符合规范)。移动的目录被指定为其父目录并且名称为 目录(PARENT_FOLDERTOZIP和FOLDERTOZIP在 开头) - 我无法弄清楚如何复制整个 目录(我认为XCOPY只能复制内容 目录和子目录。)。复制位置是指定为FOLDERTARGETLOCATION的 ,并且将压缩文件放在 中的目录指定为ZIPDIR。

7-Zip的位置通过SEVENZIP_EXE进行配置。

还要注意,以要求的 格式获取当前日期取决于区域 设置中的短日期格式。我列出了 ISO-8601,中欧和美国的三种不同版本。 列表中的活动版本适用于美国(“set FDATE =”行)。如果需要另外一个 ,则只需从另一个 中的一个复制粘贴。

这就是说,应该指出的是,这种事情是非常 更容易PerlPythonPowerShell


@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

相关问题