2009-07-10 5 views
2

Ich möchte eine Windows-Batch-Datei zum Zweck der Umbenennung einer Datei alle 25 Sekunden schreiben. Ich möchte auch, dass die Batch-Datei beendet wird, nachdem 300 Sekunden vergangen sind. Wie würde ich das machen? Hier ist, was ich bisher getan habe.Windows-Batch-Datei zum Umbenennen der Datei im angegebenen Intervall

START 

RENAME test.g test.go 

SLEEP 25 

RENAME test.go test.g 

GOTO START 

Antwort

1

Sie brauchen den Schlafbefehl, können Sie download it here.

dann können Sie etwas tun:

echo this is a test > test.txt 
SET x= 
:START 
CALL SET /a x = %x% +1 
rename test.* test.%x% 

CALL SET /a y = %x% * 25 

IF '%x%' == '300' GOTO END 

CALL SLEEP 25 
GOTO START 

:END 
4

Nun, das ist nicht allzu schwierig. Es gibt eine Reihe von bekannten Batch-Tricks, wie falsch mit ping schlafen (die Sie davor bewahrt, ein Nicht-Standard-Tool zu integrieren) und wir können dann kommen mit dem folgenden:

@echo off 
setlocal 
set n=0 
:start 
ren test.g test.go 
ping localhost -n 26>nul 2>&1 
ren test.go test.g 
set /a n+=25 
if %n% LSS 300 goto start 
endlocal 

setlocal und endlocal stellen sicher, dass alle Umgebungsvariablen, die wir erstellen und ändern, nur im Bereich der Batchdatei selbst verbleiben. Der Befehl

ping localhost -n 26 >nul 2>&1 

wird 25 Sekunden warten (da der erste Ping sofortiger sein wird und jede nachfolgende eine verursacht eine Verzögerung von einer Sekunde), während all normale und Fehlerausgabe Wegwerfen (>nul 2>&1).

Schließlich verfolgen wir, wie lange wir bisher in der %n% Variable gewartet haben und nur wenn n immer noch unter 300 ist, machen wir weiter Schleifen. Man könnte es auch tun mit einem for-Schleife, aber:

@echo off 
setlocal 
set n=300 
set /a k=n/25 
for /l %%i in (1,1,%k%) do (
    ren test.g test.go 
    ping localhost -n 26>nul 2>&1 
    ren test.go test.g 
) 
endlocal 

die oft zunächst berechnen, wie es in einer Schleife brauchen würde, und dann nur die berechnete Anzahl von Malen durchlaufen.

0

Wenn Sie Windows verwenden, dann nehme ich an, dass Sie VBScript verwenden können.

Set objFS = CreateObject("Scripting.FileSystemObject") 
strFile1 = "file.txt" 
strFile2 = "new.txt" 
While 1=1 
    Set objFile1 = objFS.GetFile(strFile1) 
    objFile1.Name = strFile2 
    Set objFile1 = Nothing 
    WScript.Echo "sleeping.." 
    WScript.Sleep (25 * 60) 
    Set objFile2 = objFS.GetFile(strFile2) 
    objFile2.Name = strFile1 
    Set objFile2 = Nothing 
    WScript.Sleep (300 * 60) 
Wend 

speichern die oben als myscript.vbs und auf der Kommandozeile

c:\test> cscript /nologo myscript.vbs