可以在Windows系统上获取当前日期以及文件的最后修改日期,例如:
date /T
echo %~tI%
(其中%I
是FOR
循环中的文件)然而,两者都取决于区域设置,因此需要用其他东西替换它们:
wmic os get localdatetime
有人知道如何填写问号吗?
背景信息,其目的是获得如下结果:
砍掉前八个字符(为了得到这一天)
这样就可以看到文件今天确实被修改了 我想避免区域设置,以确保我需要切断的字符数量。
答案 0 :(得分:4)
LotPings'脚本为您提供了如何开始的想法,但还有一些关于完整检查的内容。试试这个:
@echo off
setlocal
::change to the needed file or to the command line argument
set fileLoc=%~f0
set fileLoc=%fileLoc:\=\\%
for /f "tokens=* delims=" %%# in ('wmic os get localdatetime /format:value') do (
for /f "tokens=* delims=" %%a in ("%%#") do set "%%a"
)
::echo %LocalDateTime%
set today=%LocalDateTime:~0,8%
echo today: %today%
for /f "tokens=* delims=" %%# in ('wmic DataFile where "Name='%fileLoc%'" get lastmodified /format:Value ') do (
for /f "tokens=* delims=" %%a in ("%%#") do set "%%a"
)
echo %lastmodified%
set lmodified=%lastmodified:~0,8%
if "%lmodified%" equ "%lmodified%" (
echo modified today
) else (
echo hasnt been modified today
)
endlocal
解释了这里的子字符串:https://ss64.com/nt/syntax-substring.html
答案 1 :(得分:3)
以下批次通过wmic输出它自己的最后修改日期时间。
@Echo off&SetLocal
set File=%~f0
:: need to escape \ with another one \\
set File=%File:\=\\%
for /f %%a in (
'wmic DataFile where "Name='%File%'" get lastmodified ^| findstr "^[0-9]" '
) do Echo File:%File% lastmodified:%%a
示例输出
> 12-16.cmd
File:Q:\\Test\\2017-03\\23\\12-16.cmd lastmodified:20170323123900.908030+060
答案 2 :(得分:3)
对于时间戳比较,您可以使用forfiles
查找今天修改的文件。这个解决方案比从我认为的WMI查询结果中删除子字符串更优雅。
@echo off & setlocal
set "file=notes.txt"
forfiles /d +0 /m "%file%" >NUL 2>NUL && (
echo %file% was modified today.
) || (
for %%I in ("%file%") do echo %%~I was last modified %%~tI
)
cmd控制台中的 forfiles /?
了解详情。 forfiles
命令在匹配时退出0,在不匹配时退出1,允许使用conditional execution。另外,see this related question。
答案 3 :(得分:3)
Rojo是正确的,FORFILES
可用于列出今天已修改的文件。但它是S.L..O ...... W .....
ROBOCOPY
要快得多: - )
以下将列出当前目录中最近修改过的文件。
robocopy . . /l /is /maxage:1 /njh /njs /nc /ns /ndl /fp
如果需要,您可以指定特定路径
robocopy "c:\your\path" "c:\your\path" /l /is /maxage:1 /njh /njs /nc /ns /ndl /fp
您可以添加/S
以递归方式搜索所有子文件夹
robocopy "c:\your\path" "c:\your\path" /l /is /maxage:1 /njh /njs /nc /ns /ndl /fp /s
答案 4 :(得分:0)
经过一番努力,我找到了办法让一切运转起来(根据Lotping的答案):
set Filename=F:\\DIR\\Filename.exe
for /f %%a in ('wmic datafile where "Name='!Filename!'" get "lastmodified"^|findstr [0-9]') do set Filename_DATE=%%a
echo Filename_DATE=!Filename_DATE!
set FilenameFinalDATE=!Filename_DATE:~0,8!
echo !FilenameFinalDATE!
(注意,这里的一切都很重要(双斜线,双倍百分比,单引号和双引号,......))
答案 5 :(得分:0)