2016-06-11 5 views
0

バッチファイルで毎回変数を設定しようとしています。だから、バッチファイルが開くと、それはvarでファイルを呼び出して、それに1を再定義します。しかし、ファイルを開いてcount.batを開くと、これがcount.batに表示されます: set backupcount=1の代わりにset backupcount= be(1は2、3、4、5、enzでもかまいません)。ファイルにエクスポートするときに変数が空です

これは私が使用しているコードです:私が間違っていると私はそれを行うべきかを教えてることを知っている

@echo off 
if exist "backup-tool\count.bat" call "backup-tool\count.bat" 

if not exist "backup-tool\count.bat" echo set backupcount=0 > "backup-tool\count.bat" 

call "backup-tool\count.bat" 

if "%backupcount%"=="8" (
    echo set backupcount=1 > "backup-tool\count.bat" 
) else (
    set /a "backupcount=backupcount+=1" 
    echo set backupcount=%backupcount% > "backup-tool\count.bat" 
) 

pause >nul 

誰ですか?

すべてのサポートは大変ありがとうございます。

+0

'set/a" backupcount = backupcount + = 1 "'が正しく動作しますが、正しい構文は 'set/a"です。backupcount = backupcount + 1 "'または 'set/a" backupcount + = 1 "' – Stephan

答えて

0

この変数は、その変数を操作するコードブロックで作業し、その変数をブロックの外にある変数ではなく、その場所で使用したいので、setlocal ENABLEDELAYEDEXPANSIONを使用する必要があります。これはうまくいくはずです:

@echo off 
setlocal ENABLEDELAYEDEXPANSION 
if exist "backup-tool\count.bat" call "backup-tool\count.bat" 

if not exist "backup-tool\count.bat" echo set backupcount=0 > "backup-tool\count.bat" 

call "backup-tool\count.bat" 

if "!backupcount!"=="8" (
    echo set backupcount=1 > "backup-tool\count.bat" 
) else (
    set /a "backupcount=backupcount+=1" 
    echo set backupcount=!backupcount! > "backup-tool\count.bat" 
) 

pause >nul 
+0

ありがとう、それは動作し、今私はバックアップを削除するバックアップコードを作ることができることを証明することができます古い一週間! – Jamie

0

あなたの元の問題は遅延拡張と関連しています。しかし、あなたのコードも不必要に複雑です。これは私がそれを行うような方法である:

@echo off 

if exist "backup-tool\count.bat" call "backup-tool\count.bat" 
set /A "backupcount=backupcount%%8+1" 
echo set "backupcount=%backupcount%" > "backup-tool\count.bat" 

set /Aコマンドはゼロとして任意の実在しない変数の値をとるので、データファイルが存在しない場合は、ゼロで初期化する必要はありません。

反復回数を1から8に戻してからカウンタを1にリセットする場合は、ifを必要としない簡単な方法で% Modulus演算子を使用できます。 %%オペレータの詳細については、set /?を入力してください。this Wikipedia articleを参照してください。

EDIT追加の説明は、プログラムがbackupcount変数が存在しない最初に実行したときに

を追加しましたので、set /A "backupcount=backupcount%%8+1"式は、ファイルに格納されている1を生成します。また、set backupcount=0コマンドの前に、ifを追加して、同じバッチファイルの以前の実行に問題が生じないようにすることもできます(または、最初にsetlocalコマンドを追加することもできます)。

次回この変数を1で初期化すると、set /A "backupcount=backupcount%%8+1"の式は2となります。次の数字が最大で8の場合も同様です。

変数が8で初期化される場合、式backupcount%%8(変数を8で割ったときの剰余)はゼロです。したがって、全体の表現は1を再度生成します。

+0

コメントをいただきありがとうございますが、私の意見では、そのコードを使用する方法はありませんが、私はリセット機能を見ていきます!多分あなたはここでそれを説明することができますか? – Jamie

+0

説明が追加されました... – Aacini

+0

コードをテストしましたか?私はあなたの問題を解決するだろうと確信しています。 – Aacini

関連する問題