2016-05-09 6 views
0

前提:BATCH - 古いバックアップを、n個作成し、その後の後、バックアップを作成、削除

スクリプトが定義された場所に定義されたファイルのバックアップを作成しますn秒ごとに実行するため。 n個のバックアップが作成されたら、日付の古いものをクリーン(削除)します。

問題:私はバックアップフォルダをこのバージョンに取り組んで取得し、古いverisonsを削除するために管理しているが、私は特定のファイルでこれをしようとしたとき、「何のファイルが見つからない」

。 私は今これについて数時間頭を傷つけました。 たとえば、すべての.xlsxファイルを削除するだけではなく、複数の異なる.xlsxファイルがターゲットフォルダに存在する可能性があるためです。 3つの新しいバージョンがある場合は、古いバージョンの "File1"のみを削除したいと考えています。

私はこれを行うことができますか?あなたは以下を参照することができますように私は、ワイルドカードで試してみたが、ない運が...

ヘルプ

バール:(なかっください

- Schedule=60 (Time inseconds between each backup) 
- NumFiles=3 (How many backup versions to keep) 
- File1Path=D:\Source (Location to copy files from) 
- File1=backmeup.xlsx (Filename & extension) 
- BackupPath=D:\Target (Location to copy files to) 

コードスニペット:

@echo off 
Color 02 
mode con: cols=150 lines=25 

:Start 
SET Schedule=60 
SET NumFiles=3 
SET File1Path=D:\Source 
SET File1=backmeup.xlsx 
SET BackupPath=D:\Target 

echo Press any key to begin. 
pause >nul 
echo. 

:Single1 
FOR /F %%a IN ('WMIC OS GET LocalDateTime ^| FIND "."') DO SET DTS=%%a 
SET DateTime=%DTS:~0,4%-%DTS:~4,2%-%DTS:~6,2%@%DTS:~8,2%%DTS:~10,2% 

IF DEFINED File1Path (
    xcopy "%File1Path%\%File1%" "%BackupPath%\_BACKUP_%DateTime%_%File1%*" /h /d /y /c /i /q /r /k >nul 
    (for /f "skip=%NumFiles% delims=" %%F in ('dir "%BackupPath%" /b /a:-dh /o:-d "%File1%"') do echo del /q "%BackupPath%\%%F" 
    (goto SingleDone))) ELSE (goto End) 

:SingleDone 
echo Backups created - %DateTime% 
TIMEOUT /T %Schedule% /NOBREAK 
GOTO Single1 

:End 
echo Something is not defined or incomplete. 
echo Press any key to exit. 
pause >nul 
exit 
+0

まず、新しいバックアップを作成します。 D/B/A:-D/T:C "_BACKUP _ * _%File1%.xlsx" '(File1のバックアップを列挙します。 (ループの前に 'set/A COUNT = 0'、ループの中に' set/A COUNT + = 1')を追加してカウンタを追加します。カウンタ値( 'COUNT')が一定の制限を超えた場合、バックアップファイルを削除します(' if'条件)。カウンタの値を読むために[遅延拡張](http://ss64.com/nt/delayedexpansion.html)を使用することを忘れないでください。 – aschipfl

答えて

0

バックアップを作成するには、簡単な答えはxcopyです古いファイル/ディレクトリを削除するには、次のコマンドを使用します

forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path" 
+0

日数は間違いです。これは、シフト中に実行され、共有されたExcelシートのバックアップを保持しますそれは定期的に壊れます。 –

+0

どのくらいの頻度でバックアップする必要がありますか? – RhysO

+0

私はポストで言う。それは数秒で選択肢です。それはたぶん、C#で、このような何かをJ.Burton @ 60、または1000 –

関連する問題