下面是我的代码。
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大小。谢谢。
你显然已经对这个问题做了一些研究。
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 可以为空,但必须包含引号(实际上,在本例中不相关,但要采用一个好习惯)