如果最近24小时内未创建新文件夹,则批处理文件可以执行某些操作吗?

问题描述

我现在正在尝试制作一个每天运行的批处理脚本,并检查存储所有文件文件夹。我想检查何时创建了最新的文件夹(或文件夹中的文件),以及在过去24小时内是否没有任何新的文件夹(文件),然后执行此其他脚本以提醒我们。

但是,如果在过去24小时内创建了新的文件夹/文件,我不知道如何在此之前添加以创建/更改变量。任何帮助将不胜感激。

编辑:我已经更改了代码,并且被卡在这里。如果我删除“ set count =“,forfiles行将返回正确数量的已修改文件。但是,当我将其设置为set count =时,它开始返回0而不是正确的数字。

我还不知道我的IF语句是否还可以工作,因为我还没走那么远。

@echo off
set day=-1
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,Now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "YYYY=%result:~0,4%"
set "MM=%result:~4,2%"
set "DD=%result:~6,2%"
set "data=%mm%/%dd%/%yyyy%"

set count=forfiles /S /D +%data% /C "cmd /C if @isdir==FALSE echo _" | find /C "_"

IF count = 0 powershell.exe -file C:\User\Project\action.ps1

解决方法

试试看,注意for循环以获取计数:

@echo off
set day=-1
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "YYYY=%result:~0,4%"
set "MM=%result:~4,2%"
set "DD=%result:~6,2%"
set "data=%yyyy%/%mm%/%dd%"

for /f "delims=" %%i in ('forfiles /S /D +%data% /C "cmd /C if @isdir==FALSE echo _" ^| find /C "_"') do set "count=%%i"

IF %count% equ 0 (
   echo powershell.exe -file C:\User\Project\action.ps1
) else (
   echo count was %count%
)

我也将set "data=%dd%/%mm%/%yyyy%"更改为set "data=%yyyy%/%mm%/%dd%",因为我记得forfiles使用日期格式。不在我的Windows设备上,因此无法验证。

,

由于您已经拥有PowerShell脚本,因此使用PowerShell可能会更容易。我还没有运行它,但是应该关闭了。

#Requires -Version 3
if ((Get-ChildItem -Directory -Path 'C:\src\t' |
    Where-Object { $_.CreationTime -gt (Get-Date).AddHours(-24) }).Count -eq 0) {
        C:\User\Project\action.ps1
    }
,

是基于字符串的语言,因此

set count=forfiles /S /D +%data% /C "cmd /C if @isdir==FALSE echo _" | find /C "_"
IF count = 0 powershell.exe -file C:\User\Project\action.ps1

对解析器来说是无稽之谈。您应该使用的是FOR /F循环。


我想检查最近的文件夹(或文件夹中的文件)何时为 已创建 ,以及是否没有任何新文件夹(文件)在 过去24小时 ,然后执行我正在提醒我们的其他脚本。

对于 文件

robocopy . . /S /IS /MAXAGE:1 /L /FP /NS /NC /NDL /NJH /NJS >nul 2>&1&&powershell -file 'C:\User\Project\action.ps1'

使用本机实用程序为 Folders 进行此操作非常困难,而powershell / vbscript则更容易。