问题描述
我现在正在尝试制作一个每天运行的批处理脚本,并检查存储所有文件的文件夹。我想检查何时创建了最新的文件夹(或文件夹中的文件),以及在过去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
}
,
batch-file是基于字符串的语言,因此
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则更容易。