请问如何将此bat文件改为:监控文件夹,存在新增文件夹时执行另一个bat文件,此bat不会结束。谢谢

2025-03-09 21:03:02
推荐回答(3个)
回答1:

不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI
@echo off
rem 监控指定目录里是否有新文件夹产生/创建并运行另一个指定bat
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"

rem 要监控目录
set "folder=D:\xxx"

rem 要调用的bat
set "batfile=D:\yyy\xxx.bat"

set "logfile=list.log"
set "sleep=3"
if not exist "%folder%" (echo;"%folder%" not found&pause&exit)
>"%logfile%" dir /ad/b/s "%folder%"
:loop
cls
set "#f="
>"%tmp%\t.t" dir /ad/b/s "%folder%"
>"%tmp%\j.j" echo;s={};while(!WSH.StdIn.AtEndOfStream){t=WSH.StdIn.ReadLine();if(s[t.toLowerCase()]==undefined){s[t.toLowerCase()]='';}}
>>"%tmp%\j.j" echo;fso=new ActiveXObject('Scripting.FileSystemObject');f=fso.OpenTextFile(WSH.Arguments(0),1);
>>"%tmp%\j.j" echo;while(!f.AtEndOfStream){t=f.ReadLine();if(s[t.toLowerCase()]==undefined){WSH.echo(t);}}
for /f "delims=" %%a in ('type "%logfile%"^|cscript -nologo -e:jscript "%tmp%\j.j" "%tmp%\t.t"') do (
echo;%%a
set #f=1
)
if not defined #f (echo;无) else (
title Founded at %date% %time%
type "%tmp%\t.t">"%logfile%"
start "" "%batfile%"
)
echo;%#% +%$%%$%/%@% %z%
if exist "%windir%\System32\timeout.exe" (
>nul timeout /t %sleep% /nobreak
) else (>nul ping /n %sleep% 0)
goto loop
pause
exit

回答2:

假设指定的文件夹是E:\TEST,假设现在所有文件都存在,先用一个文本A来记录这20来个文件的名字。以便之后的判断。 可以用dir /a /b E:\TEST>>E:\A.TXT来生成这个文本。 @echo off cd /d e:\test :loop for /f "delims=" %%a in (E:\A.txt) do ( if not exist %%a (echo %%a不存在 & ping -n 600 127.1>nul & goto loop) ) echo 全部文件均存在 另一个.bat

回答3:

两个/a-d改成/ad即可监控文件夹,而不是文件了。