Сравнить метку времени файлов с текущей меткой времени - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь сравнить текущую метку времени с измененной меткой времени файла ..

Я бы использовал что-то подобное для текущей метки времени:

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 (...) 

РЕДАКТИРОВАТЬ: Моя текущая версия выглядит следующим образом. Ошибка есть, но я не могу его найти.

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)
)

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Вы можете использовать , (Windows Vista +) .

Чтобы узнать, как работает команда ForFiles, откройте окно командной строки введите forfiles /?, нажмите клавишу ENTER и прочитайте представленную информацию. Вы можете обнаружить, что вы можете даже скопировать свои файлы, используя его, вместо того, чтобы использовать вашу текущую методологию.

В следующем примере используется команда 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 его из l oop. В этом случае потребуется лишь незначительная корректировка в соответствии с представленным на данный момент случаем.

0 голосов
/ 28 апреля 2020

Я не уверен, почему существует файл с отметкой времени, более поздней, чем текущее время системы. Это звучит как проблема.

Чтобы сделать это в скрипте файла 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...