Пакетный файл Windows для переименования файла через указанный интервал - PullRequest
2 голосов
/ 10 июля 2009

Я хотел бы написать пакетный файл Windows с целью переименования файла каждые 25 секунд.Я также хотел бы, чтобы пакетный файл завершился через 300 секунд.Как бы я поступил так?Вот что у меня есть при этом.

START

RENAME test.g test.go

SLEEP 25

RENAME test.go test.g

GOTO START

Ответы [ 3 ]

4 голосов
/ 10 июля 2009

Ну, это не так уж сложно. Существует множество известных пакетных приемов, таких как неправильное использование ping для сна (что избавляет вас от необходимости интегрировать нестандартный инструмент), и тогда мы можем придумать следующее:

@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 и endlocal гарантируют, что все переменные среды, которые мы создаем и изменяем, останутся только в области действия самого пакетного файла. Команда

ping localhost -n 26 >nul 2>&1

будет ждать 25 секунд (потому что первый пинг будет немедленным, а каждый последующий - с задержкой в ​​одну секунду), отбрасывая все нормальные и ошибочные выходные данные (>nul 2>&1).

Наконец, мы отслеживаем, как долго мы ждали в переменной %n%, и только если n все еще ниже 300, мы продолжаем цикл. Вы могли бы также сделать это с помощью цикла for:

@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

, который сначала вычислит, как часто нужно будет зацикливаться, а затем просто итерирует рассчитанное количество раз.

1 голос
/ 10 июля 2009

вам понадобится команда сна, вы можете скачать ее здесь .

тогда вы можете сделать что-то вроде этого:

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
0 голосов
/ 11 июля 2009

если вы используете windows, тогда я предполагаю, что вы можете использовать vbscript.

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

сохранить выше как myscript.vbs и в командной строке

c:\test> cscript /nologo myscript.vbs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...