2016-11-23 3 views
1

Мне нужно запустить пакетный скрипт, который занимает исходную папку, и каждый файл застегивает каждый файл в свой собственный 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" 

и если/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

Вы были близки!

Я просто проверял вокруг немного, и это, кажется, чтобы быть в состоянии обрабатывать каждый файл в одном каталоге:

@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 и изменения путей!

+0

Вы должны добавить параметр '/ D' в командную строку' cd', чтобы изменить диск в случае; или удалите командную строку 'cd' и измените цикл' for' на: 'for/R"% ~ 1 "%% i in (*) do' ... Чтобы получить чистые имена файлов, используйте' %% ~ nxi' вместо '%% i' в цикле ... – aschipfl

+0

Damnit Я всегда пропускаю этот переключатель! Спасибо за напоминание! – geisterfurz007