Як отримати пакетну дату модифікації, незалежної від локальних даних


0

Мені потрібно отримати дату зміни файлу , що зберігається в змінної , як це: YearMonthDayHourMinute. Так 01/21/2019 9:12 AMби і було 201901210912. Що я буду робити, це порівняти файли, щоб побачити, які новіші, тому це має бути таким у 24-годинному форматі. Я спочатку збирався отримати це за допомогою цієї команди: for %? IN ("%cd%\out.txt") do (echo %~t?)і використовувати цикл for, щоб розділити вихід на частини, але мені було цікаво, чи дата модифікації з циклу for для цього залежить як локальне%date% ? Якщо це так, чи є спосіб перевірити, під яким типом формату він знаходиться, або є спосіб отримати дату зміни, не залежної від локальності?

Це пов'язано з тим, чому не встановлюються змінні цієї функції? Пакетний код, але я не бачу, як розв’язання одного обов'язково змінило б інше, тому я зберігаю їх як окремі питання.


Привіт Марк - Як щодо цього wmic datafile where name="C:\\folder\\folder\\File.txt" get LastModified /format:listчи чогось подібного. Я думаю, ви не хочете, щоб формат AM / PM був бажаний, і ви хочете 00-24формат у YYYYMMDDhhmmстроковому форматі. Можливо, це може допомогти вам, і ви можете повторити цикл файлу з FOR /Rциклом для чогось імені файлу та шляху. Просто швидка ідея для вас на всякий випадок.
Pimp Juice IT

No Instance(s) Available.Я зміг перетворити AM / PM в число (AM - 1, PM - 2) і поставити його раніше часу, щоб воно все ще застосовувалося як більшу кількість.
Марк Девен

Чомусь WMIC повинен використовувати два зворотні риски, як це потрібно, щоб уникнути персонажа чи будь-чого іншого. Будьте впевнені, що повний шлях до файлу використовує два передніх риски між контурами до папки, інакше вам потрібно буде перейти cd /dдо dir, а потім вказати ім'я файлу лише я думаю.
Pimp Juice IT

Ви суворо обмежені пакетними сценаріями? Windows також поставляється з PowerShell, JScript, VBScript.
grawity

Я вже був у тому самому каталозі файлу, я спробую використовувати повний шлях з подвійними лапки. Я не можу використовувати PowerShell з міркувань безпеки, але JScript і VBScript будуть добре.
Марк Девен

Відповіді:


1
set _ForString=%~1
set _ForString=!_ForString:\=\\!
For /f "tokens=1,2* delims==" %%a in ('wmic datafile where name="!_ForString!" get LastModified /format:list') do (
  echo %%a    %%b
  set %~2=%%b
)

Rem %1 is set to C:\Users\%username%\CMDS.bat

Я фактично отримую помилку C:\\Users\\theBATeam\\CMDS.bat - Invalid alias verb.

У наведеному вище фрагменті коду є дві проблеми:

:ParseWmicDatafileпідпрограма в наступному коментованому .bat скрипті повинна виконати цю роботу:

@ECHO OFF
SETLOCAL EnableExtensions

call :ParseWmicDatafile "%~f0" LastModified
REM show all variables prefixed with an underscore
set _

goto :eof

:ParseWmicDatafile
REM inputs (by value): %1 is a fully qualified file name 
REM                    %2 is a valid "wmic datafile" property name

REM outputs (by reference): _%~2 is a variable name drawn from supplied %2: 
REM                              property name prefixed with an underscore
REM                         _ForString

  REM remove residuary variable _%~2 (if present)
  if defined _%~2 set "_%~2="
  set "_ForString=%~1"
  set "_ForString=%_ForString:\=\\%"
  for /f "tokens=1* delims==" %%A in (
      'wmic datafile where name^="%_ForString%" get %~2 /format:list'
    ) do for /f "delims=" %%b in ("%%~B") do (
        echo %%A    %%b
        set "_%~2=%%b"
    )
goto :eof

Ось forпетлі

  • %%Aотримати ім'яLastModified властивості ( ) та значення ( );%%A%%B
  • %%bдля видалення закінчення повернення каретки у поверненому значенні; wmicповедінка: кожен вихідний рядок закінчується на 0x0D0D0A( <CR><CR><LF>) замість загального 0x0D0A( <CR><LF>).

Див. Статті «Дейв Бенхем» WMICта FOR /F: Виправлення <CR>проблеми, що триває

Вихід :

==> D:\bat\SU\1396664.bat
LastModified    20190201220347.477320+060
_ForString=D:\\bat\\SU\\1396664.bat
_LastModified=20190201220347.477320+060

==>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.