我想写一个windowsbatch file,每25秒重命名一个文件。 我也想batch file在300秒后终止。 我怎么去做这个? 这是我所见过的。
START RENAME test.g test.go SLEEP 25 RENAME test.go test.g GOTO START
你将需要睡眠命令,你可以在这里下载 。
那么你可以做这样的事情:
echo this is a test > test.txt SET x= :START CALL SET /ax = %x% +1 rename test.* test.%x% CALL SET /ay = %x% * 25 IF '%x%' == '300' GOTO END CALL SLEEP 25 GOTO START :END
那么,这不是太困难。 有一些众所周知的批处理技巧,比如错误地使用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秒(因为第一次ping会立即发生,随后的每一次都会产生一秒的延迟),同时丢弃所有正常和错误输出( >nul 2>&1
)。
最后,我们正在跟踪我们在%n%
变量中等待多久,并且只有当n仍然低于300时,我们才会继续循环。 不过你可以用for循环来做:
@echo off setlocal set n=300 set /ak=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
它将首先计算需要循环的次数,然后迭代计算的次数。
如果你使用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