Добавить к имени файла дату и время последнего изменения с помощью командного файла - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь скопировать все *.csv файлы из папки в другую папку, но при копировании мне нужно добавить измененную дату и время файла в имя файла.Например, если имя файла Test.csv и оно было изменено на 11/21/2018 15:01:10, вывод должен быть Test11-21-201815_01-10.csv.Я нашел скрипт для добавления к нему текущей метки времени, но мне нужно добавить дату изменения файла.Вы можете увидеть это ниже:

@echo off
set Source=C:\csvtest
set Target=C:\csvtest\csvtest\Archive
FOR /f "tokens=1-8 delims=/.:- " %%A in ("%date%%time%") DO (
SET Month=%%B
SET Day=%%C
SET Year=%%D
SET Hours=%%E
SET Minutes=%%F
SET Seconds=%%G
SET All=%%B-%%C-%%D_%%E-%%F-%%G
)

FOR %%i IN ("%Source%\*.csv") DO (
COPY "%%i" "%Target%\%%~Ni %All%.csv")

Заранее спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

@ Способ LotPings длится много времени, если PowerShell не загружен.

Итак, я предоставлю намного более быстрый и понятный способ в пакетном файле, который требует delayedexpansion:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-2" %%a IN ('forfiles /M file.ext /C "cmd /C echo @fdate @ftime"') do (
 set line1=%%a
 set line2=%%b
 set line1r=!line1:/=-!
 set line2r=!line2::=-!
 rename "file.ext" "file!line1r!!line2r!.ext"
)
rem NOTE: Date format is DD-MM-YYYY. Time format is HH-MM-SS.

Давайте разберемся с этим:

for /f ... я вам хорошо знаю.

Команда forfiles /M file.ext /C "cmd /C echo @fdate @ftime" означает запуск команды (/C) для файла, указанного в/M опция (file.ext)."cmd /C echo @fdate @ftime" означает открыть новый cmd и выполнить команду, указанную в строке, а затем завершиться.@fdate - это дата последнего изменения файла, а @ftime - время последнего изменения файла.

Мы устанавливаем переменные line1 и line2 для каждого из @fdate и @ftimeи затем мы вносим в них некоторые изменения формата.

Наконец, мы переименовываем file.ext в fileDD-MM-YYYYHH-MM-SS.ext.

Для получения дополнительной информации введите for /? & forfiles /? в новом cmd.

Надеюсь, это поможет вам, так как это быстрее.

0 голосов
/ 23 ноября 2018

В SO есть несколько примеров добавления даты,
, но я бы использовал PowerShell в качестве инструмента для этого (в пакетном режиме).

:: Q:\Test\2018\11\23\SO_53450598.cmd
@echo off
set "Source=C:\test"
set "Target=C:\test\Archive"
PowerShell -Nop -C "Get-ChildItem '%Source%\*.csv'|Copy-Item -Destination {'%Target%\{0} {1:MM-dd-yyyy_HH-mm-ss}.csv' -f $_.BaseName,$_.LastWriteTime} -WhatIf"

Если вывод выглядит нормально, удалите -WhatIf в конце.

...