CMD / BAT получить дату изменения всех имен файлов и добавить к их имени

У меня проблемы с этим сценарием. Я объясню ниже кодовый блок.

@Echo off
pushd "\serverfolder"
SETLOCAL EnableDelayedExpansion

@FOR /F "TOKENS=2" %%A IN ('WHERE /T "testfiles*.*"') DO @(
set fdate123=%%A
echo !fdate123:~5,9!0!fdate123:~0,1!!fdate123:~2,2!
call StringLen !fdate123!
)

pause

:StringLen
Setlocal EnableDelayedExpansion
:: strLen String [RtnVar]
::             -- String  The string to be measured, surround in quotes if it contains spaces.
::             -- RtnVar  An optional variable to be used to return the string length.
Set "s=#%~1"
Set "len=0"
For %%N in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
  if "!s:~%%N,1!" neq "" (
    set /a "len+=%%N"
    set "s=!s:~%%N!"
  )
)

Endlocal&if "%~2" neq "" (set %~2=%len%) else echo %len%
Exit /b

То, что я пытаюсь сделать, это получить дату изменения файла и изменить формат этой даты, возвращенной на ГГГГММДД. Я хочу, чтобы измененная дата была добавлена ​​к имени файла. У меня могут быть файлы из нескольких дней в этой папке, и каждый файл может иметь свою дату изменения даты.

Пожалуйста, не отмечайте это как дублирующий вопрос, потому что я не мог найти этот подход для этого здесь.

Я пытался проверить длину строки даты, чтобы я мог обрабатывать даты, такие как 01.01.2009 (длина 8) против 13.01.2009 (длина 9) против 01.10.2009 (длина 9) против 10 / 22/2019 (длина 10), затем, используя операторы if, соответствующим образом анализируют дату с помощью чего-то вроде! Fdate123: ~ 5,9 !! fdate123: ~ 0,1 !! fdate123: ~ 2,2! - Я еще не закончил это.

Я попытался получить дату с помощью dir /T:W testfiles*.* И запустить findstr, но я не достаточно хорошо понимаю findstr, чтобы сделать это.

Я также попытался forfiles /M BC_Services_Adjustment* /C "cmd /c echo @fdate" его из forfiles /M BC_Services_Adjustment* /C "cmd /c echo @fdate" и также перешел к этому.

Может быть, у кого-то есть лучшее решение, я думаю, что сейчас у меня беспорядок. Кто-нибудь знает, как получить метку времени изменения даты для каждого файла в папке, преобразовать ее в переменную в формате ГГГГММДД и затем добавить ее во все файлы в папке?

Примечание: я не ищу решения powershell для этого вопроса, не тратьте свое время на публикацию ответов powershell.

Всего 1 ответ


FOR /F "TOKENS=2" %%A IN ('WHERE /T "testfiles*.*"') DO (
 for /f "tokens=1-3delims=/-." %%i in ("%%A") do set "mm=00%%i"&set "dd=00%%j"&set "yy=0000%%k"
 set "fdate123=!mm:~-2!!dd:~-2!!yy:~-4!"
 echo !fdate123!
)

должно позволить вам построить данные в соответствии с вашими пожеланиями.

Внутренний if присваивает mm , dd и yy соответствующим образом, используя указанные разделители, анализируя %%A в качестве литерала. Каждому предшествует соответствующее количество нулей. Затем необходимая строка строится с использованием подстроки, выбирающей последние 2/4 символа строки, поэтому получается 8-символьный вывод.

Я использую формат dd/mm/yyyy и на самом деле не тестировал этот метод, но манипулирование им в соответствии с вашими требованиями должно быть очевидным, единственная проблема на самом деле заключается в том, как обрабатывать даты yy как отличающиеся от дат yyyy , если это вызывает озабоченность.


Есть идеи?

10000