Windows Пакетное переименование файлов с указанием даты создания и времени - PullRequest
0 голосов
/ 22 января 2020

Я нашел следующий код, который работает в :

FOR /R "C:\Folder" %Z IN (*.tif) DO @( FOR /F "Tokens=1-6 delims=:-\/. " %A IN ("%~tZ") DO @( ren "%~dpnxZ" "%~A_%~B%~C_%~D%~E_%~nZ%~xZ") )

Однако у меня две проблемы.

  1. Мне нужно запустить его в
  2. Я не могу получить секунды или даже миллисекунды в качестве имени файла

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Я использовал PowerShell для переименования файла в конце

dir $args[0] | foreach {
  $newname = "$($_.CreationTime.toString('yyyyMMdd-HHmmssfff'))-$($_.Name)"
  if (test-path $newname) {
    "Cannot rename $_"
  } else {
    ren $_ $newname 
  }
}
0 голосов
/ 22 января 2020

Внутри символы % требуют удвоения:

@For /R "C:\Folder" %%G In (*.tif)Do @For /F "Tokens=1-5Delims=:-\/. " %%H In ("%%~tG")Do @Ren "%%G" "%%~H_%%~I%%~J_%%~K%%~L_%%~nxG"

Хотя в пакетном файле я бы предложил вам не используйте одну строку, (ограничение длины строки в пределах 80 символов для соответствия ширине окна cmd.exe по умолчанию и для облегчения чтения) :

@For /R "C:\Folder" %%G In (*.tif)Do @For /F "Tokens=1-5Delims=:-\/. " %%H In (
    "%%~tG")Do @Ren "%%G" "%%~H_%%~I%%~J_%%~K%%~L_%%~nxG"

Кстати, ваш начальный пример мог бы выглядеть примерно так:

For /R "C:\Folder" %G In (*.tif)Do @For /F "Tokens=1-5Delims=:-\/. " %H In ("%~tG")Do @Ren "%G" "%~H_%~I%~J_%~K%~L_%~nxG"

У вас было несколько ненужных скобок и неиспользованный токен, и вы могли объединить имя и расширение в один модификатор вместо два. Вы могли также удалить ненужные расширения и модификаторы из имени файла, которое нужно переименовать.


[Edit /]
Кстати, вы заметите, что я не ответил на ваш второй вопрос, потому что модификатор %~t не выводит секунды и миллисекунды, (поэтому вы, вероятно, могли бы удалить разделитель .) , поэтому вы не можете извлечь его из этого кода. Поэтому вам нужно будет использовать альтернативный метод, и этот сайт не предоставляет бесплатную услугу написания кода, поэтому вам нужно будет опубликовать новый вопрос, как только вы получите этот код. Кроме того, проблемы / проблемы должны быть ограничены только одним на пост.
...