使用批处理脚本

时间:2016-11-23 13:53:40

标签: batch-file recursion command zip

我需要运行一个批处理脚本,它接受一个源文件夹并将每个文件以递归方式压缩到自己的zip文件中并通过所有子文件夹将zip文件保存到给定目标。

这是一个工作变体,只需将源文件夹拉链并将zip保存到目标:

 @echo off


 set year=%date:~-4,4%
 set month=%date:~-10,2%
 set day=%date:~-7,2%
 set hour=%time:~-11,2%
 set hour=%hour: =0%
 set min=%time:~-8,2%

 set zipfilename=%~n1.%year%_%month%_%day%_%hour%_%min%
 set destination=%~dp1

 set source="%~1\*"
 set destpath="%~2"
 set destname="%~3"
 set ziptyp="%~4"
 set dest= "%destpath%\%destname%_%year%_%month%_%day%_%hour%_%min%.%ziptyp%"
 REM "%destination%Backups\%zipfilename%.%desttyp%"

 IF [%1]==[/?] GOTO BLANK
 IF [%1]==[] GOTO BLANK
 IF [%1]==[/h] GOTO BLANK
 IF [%1]==[?] GOTO BLANK

 set AppExePath="%ProgramFiles(x86)%\7-Zip\7z.exe"
 if not exist %AppExePath% set AppExePath="%ProgramFiles%\7-Zip\7z.exe"

 if not exist %AppExePath% goto notInstalled

 echo Backing up %source% to %dest%


 if /I %ziptyp%=="zip" ( 
 %AppExePath% a -rtzip %dest% %source%)

 if /I %ziptyp%=="7z" ( 
 %AppExePath% a -rt7z %dest% %source%)


 echo %source% backed up to %dest% is complete!

 goto end

 :BLANK


 goto end

 :notInstalled

 echo Can not find 7-Zip


 :end

对于这个我需要更改以下部分:

 if /I %ziptyp%=="zip"

和      if / I%ziptyp%==“7z”

我尝试了以下方式以及更多:

 (
 cd  %source%
 FORFILES %source% /M *.* /C "%AppExePath% a -rtzip "%%~nG.zip" ".\%%G\*"")

 FOR /R %source% %%G in (.) do ( 
 Pushd %%G 
 %AppExePath% a -rtzip "%%~nG.zip" ".\%%G\*"
 Popd )

 for /R %%a in (%source%) do (zip -r -p "%%~na.zip" ".\%%a\*")

有没有人知道如何让这个工作?

提前致谢,

TheVagabond

1 个答案:

答案 0 :(得分:1)

你很亲密!

我刚刚测试了一下,这似乎能够处理一个目录中的每个文件:

@echo off
cd /D "%~1"
for /r %%i in (*) do (
    REM Process file here!
    echo Full path: %%i
    echo Filenames with extension: %%~nxi
)

这会移动到您作为参数提供的路径,然后使用*代替.将获取每个文件。您现在可以按照理想的方式处理它。

要检查如何根据需要修改结果,我建议您阅读有关路径参数修改的this great answer

感谢aschipfl提醒我/D的CD和修改路径!