如何多次执行批处理文件,直到所需文件存在,然后停止批处理文件

问题描述 投票:0回答:1

下面是我的代码。

pushd \\172.31.100.101\dir1\dir2\
set xxx=%CD%\dir3\dir4
set yyy=%CD%\dir5\dir6\r2.txt

IF EXIST %yyy% (
    echo R2 aldy completed > c:\r2.txt
    exit
)

set "filenames="
for /F "delims=" %%F in ('
    forfiles /p %xxx% /m Failed_Match_Data*.xlsx /s /d +0 /C "cmd /C echo/ @path"
') do (
    call set "filenames=%%filenames%% %%F"
)

IF NOT EXIST %filenames% (
    echo Failed_Match_Data is missing > c:\Failure1.txt
    exit
)
    echo %filenames% is exist > c:\Success1.txt

timeout /t 30 /nobreak
"C:\windows\notepad.exe"
echo R2 started > %yyy%

popd

我会将这个批处理文件安排在每天上午 8 点,每 15 分钟间隔执行一次,直到上午 11 点,然后停止。我不知道上午 8 点到上午 11 点之间

Failed_Match_Data*.xlsx
何时会在所需文件夹中准备好。我的目标是,一旦文件准备好,下一次执行将跳过运行 notepad.exe 的任务。我在那里设置了超时,因为我想确保在运行 notepad.exe 之前
Failed_Match_Data*.xlsx
已完成写入磁盘。 xlsx非常小,大约20kb大小。谢谢。

batch-file
1个回答
0
投票

你显然已经对这个问题做了一些研究。

c:\r2.txt
需要每天删除,否则第一次执行此程序时,昨天的
c:\r2.txt
已经存在,您将退出。

您的下一步是在

Failed_Match_Data*.xlsx
中累积
filenames
文件列表。这表明您知道这些文件可能有 0 个、1 个或多于 1 个。

声明

IF NOT EXIST %filenames% (

因此将被解决为

之一
IF NOT EXIST (

IF NOT EXIST filename1 (

IF NOT EXIST filename1 filename2 (

第一个将尝试查找名为

(
的文件,并且会产生语法错误,因为您没有提供“如果
(
不存在该怎么办”操作。

第二个测试总是会失败,因为我们知道 filename1 存在 - 我们在上一步中收集了它的名称。

第三个测试总是会因为同样的原因失败,但指令是如果 filename1 消失则执行 filename2。

也许你的测试应该是

if not defined filenames (

这将测试

filenames
是否设置为已找到的文件列表,或者是否“设置”为 nothing,因为未找到文件名。

所以 - 解决你明显的问题(这是未经测试的)

pushd \\172.31.100.101\dir1\dir2\
set xxx=%CD%\dir3\dir4
set yyy=%CD%\dir5\dir6\r2.txt

DEL c:\r2.txt >nul 2>nul

:again

IF EXIST %yyy% (
    echo R2 aldy completed > c:\r2.txt
    exit
)

if exist "%xxx%\Failed_Match_Data*.xlsx" (
 (
  echo Failed Match Data files at %time% on %date%
  dir /b /a-d "%xxx%\Failed_Match_Data*.xlsx"
 )> c:\Success1.txt
 start "Failed Match Data" notepad c:\success1.txt
 exit
)
rem no Failed_Match_Data*.xlsx
if "%time:~0,2%" neq "11" (
 timeout /t 900 /nobreak >nul
 goto again
)

(
 echo No Failed Match Data files at %time% on %date%
 dir /b /a-d "%xxx%\Failed_Match_Data*.xlsx"
)> c:\Failure1.txt
start "Failed Match Data" notepad c:\Failure1.txt
exit

您需要弄清楚

r2.txt
c:\r2.txt
还是
%yyy%

此流程预定于08:00开始,无需重复。

首先删除

r2.txt
(仅限上午 8 点)-
>nul 2>nul
抑制消息

然后查看

r2.txt
是否存在 - 如果为真则退出

然后查看是否存在任何

failed
文件。
如果是这样,写出
success
文件,启动记事本并退出
如果不是,通过比较
11...
%time%
的前2个字符来判断时间是否为
11
,如果不是,则超时900秒并重复该过程。

否则已经是11:00了,所以写出

failure
文件,启动记事本并退出

注意语法

(
 echo ....
 dir....
)>filename

echo
dir
输出重定向到文件以构建报告

还有

start "quotedstring" notepad filename

在记事本中打开文件名,并将带引号的字符串指定为窗口标题。 Quotedstring 可以为空,但必须包含引号(实际上,在本例中不相关,但要采用一个好习惯)

© www.soinside.com 2019 - 2024. All rights reserved.