比较文件的时间戳和当前的时间戳。

问题描述 投票:0回答:1

我试图比较文件的当前时间戳和更改后的时间戳。

我会用类似的东西来表示当前的时间戳。

set d=%date:~6,4%-%date:~3,2%-%date:~0,2%
set t=%time::=.%
set t=%t: =0%
set currentstamp="%d%  %t%"

我会用类似的东西来比较修改后的时间戳。

set filetimestamp=dir /T:W  C:\test.txt

然后我会比较这些变量

if filetimestamp>currentstamp (...) 

EDIT: 我现在的版本是这样的. 有一个错误,但我找不到他。

set NEWDIRECTORY=D:\test
set PROJECTNAMES=(projekt1)

for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /format:list') do set TIMESTAMP2=%%I
set TIMESTAMP2=%TIMESTAMP2:~0,8%-%TIMESTAMP2:~8,6%

rem do some things

for %%A in %PROJECTNAMES% do (
    for %%F in (C:\%%A.exe) do set file=%%~fF
    for /f "tokens=2 delims==" %%I in ('wmic datafile where name^="%file:\=\\%" get lastmodified /format:list') do set TIMESTAMP1=%%I
    if %TIMESTAMP1% lss %TIMESTAMP2% (XCOPY "C:\%%A.exe" "%NEWDIRECTORY%\%%A.exe" /Y)
)
windows batch-file cmd
1个回答
0
投票

我不知道为什么会有一个文件的时间戳比系统的当前时间还要近。这听起来像是个问题。

要在 cmd.exe .bat 文件脚本中做这件事,我会使用 PowerShell 来避免字符串处理和本地化问题。

powershell -NoLogo -NoProfile -Command ^
    "(Get-ChildItem -Path '.\xyx.txt').LastWriteTime -gt (Get-Date)"

在.bat文件脚本中,这将X变量设置为True或False。

FOR /F %%A IN ('powershell -NoLogo -NoProfile -Command ^
    "(Get-ChildItem -Path '.\xyx.txt').LastWriteTime -gt (Get-Date)"') DO (SET "X=%%A")
IF /I %X% == True (
    REM Do True work
)

当然,如果能用PowerShell编写脚本,会更容易写,也更容易读。

if ((Get-ChildItem -Path '.\xyx.txt').LastWriteTime -gt (Get-Date)) {
    # Do True work
}

0
投票

你可以使用 , (Windows Vista+).

要了解如何 ForFiles 命令工作,请打开命令提示符窗口,输入 forfiles /?,按 进入 键,并阅读所提供的信息。你可能会发现,你甚至可以用它来复制你的文件,而不是使用你现在的方法。

下面的例子使用了 forfiles.exe 命令,并打印一条消息,让你知道文件是否在今天被修改。

要使用它,请将下面的全部内容保存为一个完整的 :

@"%__AppDir__%forfiles.exe" /P "%~dp1." /M "%~nx1" /D +0 /C "Cmd /C If @IsDir==FALSE Exit /B 0">NUL 2>&1&(If ErrorLevel 1 (Echo File was not modified today.) Else Echo File has a modified date of today.)&Pause

然后将你的文件拖放到保存的脚本上。

如果你想在你提供的上下文中使用它,你可以把代码放在脚本的一个有标签的部分,并且 Call 它从循环。然后,它只需要稍作调整,以适应你目前提出的情况。

© www.soinside.com 2019 - 2024. All rights reserved.