批处理 if 循环判断文件是否为空执行不同命令

具体是这样的 c 盘下有 1.txt -------- 100.txt 文件,用个批处理每隔 60秒 判断一次1.txt是否为空,如果为空,就继续循环60秒后再判断是否为空,直到不为空,就删除1.txt ,然后判断下一个2.txt是否为空,如此类推直到100.txt

没明白你的意思,我整理下
1、判断1.txt是不是空,如果空则停止60秒,再次判断,循环操作,要是一直都空,一直循环,不会操作任何文件
2、如果1.txt不空,则删除1.txt,再判断2.txt,同样循环操作,如果一直空,一直循环,不会操作任何文件
3、后面所有文件都是这样的循环,直到100.txt删除,然后回到1.txt
是这样吗?追问

是的,你理解的正确 谢谢 删除100.txt后就全部完成, 关闭批处理

追答

不是很明白,不空则删除,为什么要批处理,直接全部删了不好吗?

追问

就是按顺序判断 100个txt文件是否为空,如果有字符就删除它。
因为有其他程序在运行会生成这些结果,该程序设置每一分钟生成一个结果 并保持到 1 --100 的txt文件中去 例子中是100 实际可能 10000

追答

不是,我没弄明白的意思是,你不想要这些文件对吧,每隔一分钟,全部删除一次不好吗?为什么只删除一个文件,还要排顺序?
而且要是文件一直是空的,这种循环的方式全部删除可能要几小时甚至几天才能结束,才能删到最后一个文件

追问

对,不要这些文件,删除了就知道其他程序执行到哪里了
不能一次删除,因为每分钟只会生成一个txt文件

追答

这里有个问题,如果我检查了1以后,删除了,本来按顺序应该检查2了,但是现在不存在2怎么办

追问

如果1.txt不为空被删除然后检查2.txt,不用在回头检查1.txt 就一次,一旦不为空就删除不再往前面检查,要一直往下,直到100.txt为止

追答

是2没有,不是1没有,1 删除了,检查2的时候发现2没有了,是跳过2 检查3吗?

追问

2.txt 不会没有,因为就这个批处理在处理这些文件 你看看我自己写的大概是这个意思 就是不知道哪里出错了
@echo off
:1
ping -n 60 127.0.1>nul
for %%a in (c:\1.txt) do if %%~za==0 (
goto 1
)
else
:2
ping -n 60 127.0.1>nul
for %%a in (c:\2.txt) do if %%~za==0 (
goto 1
)
else
...................

追答

你这写到100恐怕要累死了
既然你这么确定,我要你的要求给你写一个

追问

你给个 1 -- 3 就行了 谢谢

追答

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET /A i=1

:ONE
TIMEOUT /T 60
IF %i% GTR 100 (
EXIT
)

FIND /V "" %i%.TXT&&DEL /F %i%.TXT||GOTO :ONE

SET /A I+=1
GOTO :ONE

追问

这个有问题 它会立刻删除有字符txt 并没有等待 60秒 而且会出现以下错误
---------- 1.TXT
'TIMEOUT' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
---------- 1.TXT
'TIMEOUT' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
改用小写的 timeout 也一样

追答

你什么系统啊,这些是基本的命令,不要说是精简的不能再精简的系统啊,还有你说的是空则停止60秒,不空则离开删除,我没理解错吧,你看到空不空都这样说因为timeout没有,如果有就会停60秒

---------- 1.TXT这个不是错误,是提示,TIMEOUT在xp上可能会没有,但是其他其他是肯定有的,除非你的系统把基本的功能都删了

换成这个试下,这样没有任何提示了
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET /A i=1

:ONE
PING -n 61 255.255.255.254>nul
IF %i% GTR 100 (
EXIT
)

FIND /V "" %i%.TXT>nul&&DEL /F %i%.TXT||GOTO :ONE

SET /A i+=1
GOTO :ONE

温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜