前提: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
まず、新しいバックアップを作成します。 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