Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 检查文件是否在过去xx天后被修改_Date_Batch File_Windows 7_Last Modified - Fatal编程技术网

Date 检查文件是否在过去xx天后被修改

Date 检查文件是否在过去xx天后被修改,date,batch-file,windows-7,last-modified,Date,Batch File,Windows 7,Last Modified,我正在检查文件中修改的日期。我想测试文件是否在/d-3之后被修改。根据,这将检查文件是否在该日期之前被修改。我需要检查文件是否在该日期之后被修改。文档还声明我可以指定日期。我可能最终会这样做,尽管生成一个日期来检查会稍微复杂一些,如果可能的话,我更愿意避免使用这个日期。 我该怎么办 forfiles /m Item_Lookup2.csv /d -3 >nul 2>nul && ( echo - updated goto :PROCESS_FILE ) ||

我正在检查文件中修改的日期。我想测试文件是否在
/d-3
之后被修改。根据,这将检查文件是否在该日期之前被修改。我需要检查文件是否在该日期之后被修改。文档还声明我可以指定日期。我可能最终会这样做,尽管生成一个日期来检查会稍微复杂一些,如果可能的话,我更愿意避免使用这个日期。 我该怎么办

forfiles /m Item_Lookup2.csv /d -3 >nul 2>nul && (
  echo - updated

  goto :PROCESS_FILE
) || (

  echo - out of date
  set outdated="true"

  goto :CHECK_ERRORS
)

我发现用纯批处理按不同时间筛选文件并不容易,因此我尝试创建一个通用工具(可能还远远不够完美)。尝试使用:

call FileTimeFilterJS.bat "." -filetime modified -direction after -dd -3

您的做法是正确的,但是
forfiles/d-n
测试在n天或更早的时间修改的文件,而不是更晚。您需要做的是反转
&&
|
代码块,并可能指定4天而不是3天

如果匹配,则为4天或更久,并归类为过期。如果不匹配,则在过去3天内已更新

试试这个:

forfiles/d-4/m“Item_Lookup2.csv”>NUL 2>NUL&(
回音-过时
设置为“true”
转到:检查错误
) || (
回声-更新
goto:进程文件
)
额外提示:如果您想进行一些测试,可以使用PowerShell命令手动操作文件的上次修改时间戳:

powershell”(gi Item_Lookup2.csv)。LastWriteTime='6/1/2015 09:30:00 AM''

。。。将项目_Lookup2.csv的最后修改时间戳设置为6月1日上午9:30。盐的味道。

forfiles/D+n
显然会在将来查找带有时间戳的文件。或者,使用此Powershell脚本开始:

## usage: ff.ps1 [-age n] [-mask *.*]
## find files newer than n days 
## with filenames matching mask

Param (
    [float]$age = 0,
    [string]$mask = '*.*'
)

$from = $(get-date).addDays(-$age)
GCI -path '.' -filter $mask -recurse -force | Where {$_.attributes -ne "Directory"-and $_.lastwritetime -gt $from } | ForEach { write-host $_.lastwritetime '   ' $_.fullname }
这非常简单,您可以指定最大年龄(-age n)和/或文件掩码(-mask*.csv)。输出为时间戳+完整文件名,可轻松修改。查看日期计算,并将其与DOS批处理所需的噩梦进行比较。

我非常喜欢-非常简单。我发现有趣的是,它在计算年龄时忽略了时间成分。因此,如果当前时间是午夜,最后修改的时间戳是前一天的23:59:59,那么1秒的实际年龄可以计算为一天。这可能是你想要的行为,也可能不是

我有一个基于ROBOCOPY的不同解决方案,它在计算文件龄时使用完整的时间戳。因此,如果指定最长期限为3天,则它将查找在过去72小时内创建或修改的文件

ROBOCOPY的一个优点是它允许您指定最小年龄和/或最大年龄

这是一个很难解释的问题。我没有使用ERRORLEVEL,而是检查命令是否列出了有问题的文件。我使用了一个FOR/F循环,如果没有列出任何文件,它将引发一个错误。BREAK命令只是一个始终成功的命令,如果列出文件,则不会产生任何输出

有,其中许多是此应用程序所需的:-)


再次阅读文档,特别是
/D date
部分。@SomethingDark我需要它是一个数值,而不是一个特定的日期。我希望有一个更简单的方法。可能是重复的。如果要使用此方法,我应该将库保存在'E:\JScript\'?@pcnate-否!它使用内置的wsh/jscript`E:\JScript\'只是cscript.exe的一个命令行参数,表示使用JScript引擎。是否可以指定单个文件?或者我应该如何处理输出?@pcnate-no-在实现时,您只能传递一个目录进行搜索。您可以使用
FINDSTR
FIND
对输出进行过滤。我非常喜欢这个想法,尽管这不是我一直在寻找的最简单的答案。感谢分享,我以后很可能会更多地使用它,因为我不知道你可以从批处理文件中执行JS(或其他方式)。哇,这是一个简单而明显的解决方案,一旦我看到它。但我敢打赌,我是许多从未想过这个解决方案的人之一。谢谢!当然,如果文件根本不存在,它将导致误报。如果不存在“Item_Lookup2.csv”检查,则应在
forfiles
行之前添加一个额外的
,以防止出现这种情况。请查看我的-同样有效,但计算年龄的规则略有不同。这两种解决方案都不是更好的,它只是取决于您想要使用什么规则。有趣的想法!明天当我在Windows上时,我必须尝试一下这个。在
%%A
中我应该期望什么?它列出了ROBOCOPY类(
new
same
),文件大小和文件名(带路径)。您可以添加
/NC
/NS
选项以消除输出中的类别和大小。@pcnate-您还可以添加
/TS
选项以获取上次修改的时间戳。我相信格式将始终是24小时格式的
YYYY/MM/SS hh:MM:SS
,而不管语言环境如何。
(for /f %%A in (
  'robocopy . "%temp%" "Item_Lookup2.csv" /maxage:3 /is /it /xx /l /ndl /njh /njs'
) do break) && (
  echo - updated
  goto :PROCESS_FILE
) || (
  echo - out of date
  set outdated="true"
  goto :CHECK_ERRORS
)