2012-04-27 13 views
2

これはthe same question I had beforeですが、今はバットファイルでなければなりません。cmdスクリプト:古い、増分、コピーを削除

1)私は "file.rollback3"

2を削除する)その後、私は、すべてのファイルをインクリメントしたい1 file.rollback1 - > file.rollback 2 file.rollback2 - > file.rollback 3

3)...これは私がこれまで持っているものであるロールバック・ディレクトリ

に別のディレクトリからfile.dataをコピー

@echo off 
set path=c:\temp3 
cd %path% 
set fileCount=0 
for /f "tokens=1*" %%a in ('dir /a * /b /s') do (
     call set /a fileCount=%%fileCount%%+1) 
echo %fileCount% 
set /a delFile=(%fileCount%-1) 
echo %delFile% 
del *.rollback%delFile% 
pause 
set counter=%delFile% 
:incrementLoop 
IF "%counter%" geq "0" 
(
    ren \.rollback%counter% \.rollback 
    set /a %counter% = %counter%-1 
    goto incrementLoop 
) 
goto incrementLoop 
pause 
+0

ニース!しかし、何か質問がありますか?それとも、何かがうまくいかないと言いたいだけですか? – jeb

答えて

0
@ECHO OFF 
SET "rollbackdir=..." 
SET "differentdir=..." 
SET "filename=..." 
SET "numcopies=3" 
FOR /L %%i IN (%numcopies%,-1,1) DO (
    IF %%i == %numcopies% (
    DEL "%rollbackdir%\%filename%.rollback%%i" 2>NUL 
) ELSE (
    SETLOCAL EnableDelayedExpansion 
    RENAME "%rollbackdir%\%filename%.rollback%%i" "%filename%.rollback!next!" 2>NUL 
    ENDLOCAL 
) 
    SET next=%%i 
) 
COPY "%differentdir%\%filename%.data" "%rollbackdir%" 
1
@echo off 
setlocal EnableDelayedExpansion 
cd C:\temp3 
for %%f in (*.rollback?) do set delFile=%%f 
echo del %delFile% 
pause 
set lastFile=%delFile:~-1% 
set /A lastButOne=lastFile-1 
for /L %%i in (%lastButOne%,-1,1) do (
    echo ren *.rollback%%i *.rollback!lastFile! 
    set lastFile=%%i 
) 
echo copy C:\different\directory\file.data file.rollback1 
pause 
+0

OPはロールバック#3を削除したいと言っていますが、このスクリプトは最後に見つかったロールバックを削除します。 #3でない場合はどうなりますか(まだ)? –

+0

上に示したOPのコードは、最後のロールバックファイルを検索して削除するので、彼はそれをやりたいと思っていました。さもなければ、単純な 'del rollback3'' ren rollback2 rollback3'' ren rollback1 rollback2'プログラムが問題を解決するでしょうか? – Aacini

+0

あなたは正しいです、私はちょうど彼らの言葉の説明に満足していたし、スクリプトを見て多くはありませんでした。そして、はい、あなたが与えた3つのコマンド(と 'コピー')は実際には十分でしょうが、私たちは簡単な方法を探しているわけではありません。 OPでもありません。 :) –