使用Windows批处理命令循环直到文件存在

14

我该如何将以下代码转换为Windows批处理命令?

这是一个Perl脚本,在while循环中搜索文件,如果找到则退出。

use strict;
use warnings;
my $filename = 'something.txt'; 
while (1) {

if (-e $filename) {
print "File Exists!";
   exit;
   }

}
1个回答

27

这是一篇相对简单的翻译。代码应该很容易理解:

@ECHO OFF
SET LookForFile="C:\Path\To\File.txt"

:CheckForFile
IF EXIST %LookForFile% GOTO FoundIt

REM If we get here, the file is not found.

REM Wait 60 seconds and then recheck.
REM If no delay is needed, comment/remove the timeout line.
TIMEOUT /T 60 >nul

GOTO CheckForFile


:FoundIt
ECHO Found: %LookForFile%

2
IF EXIST 缺少 %。原始代码没有延迟,那么为什么你要加呢?如果你使用 TIMEOUT 引入了延迟,那么你应该将 stdout 重定向到 nul 并使用 /NOBREAK 选项。 - dbenham
1
@dbenham - 在提出这个问题之前,我已经尝试过使用子程序,但是我一直收到“批处理递归超过堆栈限制”的错误提示。我猜 TIMEOUT /T 60 解决了这个问题。 - Mihir
4
如果我是你,我不会移除那个超时时间。可以将它略微缩短,比如调整为1秒钟,但不要移除它。如果你移除了它,CMD 将进入一个死循环,并且会占用大量的 CPU 资源。 - Magoo
除非需要更长的时间才能达到限制,否则TIMEOUT无法消除递归限制错误。将代码转换为可能导致该错误的最简单方法是将“GOTO CheckForFile”更改为“CALL:CheckForFile”。 - dbenham
1
@dbenham - 我从未说过那个,OP报告了这个问题(在此线程的第4条评论中),但似乎他正在使用子调用而不是GOTO命令。 - Jason Faulkner
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接