2016-11-23 15 views
1

バッチスクリプトを実行するには、ソースフォルダを使用し、すべてのファイルをすべてのサブフォルダから再帰的に独自のzipファイルに圧縮し、zipファイルを指定の保存先に保存します。ここでバッチスクリプトで複数のファイルを複数のzipファイルに圧縮する

ちょうどそれソースフォルダのジッパーを取り、先にzipファイルを保存しワーキング・バリアントである:

if /I %ziptyp%=="zip" 

:私は以下の部分を変更する必要があり、この1のために

@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 

そして /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とお読みください。

cdのための/Dとパスの変更を思い出させるためのaschipflのおかげで!

+0

'/ D'オプションを' cd'コマンドラインに追加して、ドライブを変更する必要があります。/cd "コマンドラインを削除し、' for'ループを以下のように変更してください: '/ R" %% 1 in %% i in(*)do' ...純粋なファイル名を得るには '%%〜ループ内の '%% i'の代わりに' nxi'を使用しています... – aschipfl

+0

Damnit私はいつもこのスイッチがありません!思い出してくれてありがとう! – geisterfurz007

関連する問題