Добавить отметку даты и времени к скопированному файлу с помощью пакетной обработки Windows

Добавить отметку даты и времени к скопированному файлу с помощью пакетной обработки Windows

Я думал, что это будет просто, но оказалось, что это сложнее, чем я думал.

Я хочу, чтобы файл был скопирован и вставлен с добавленной временной меткой. Я получаю временную метку, используя этот код:

set hournum=%time:~0,2%

if %hournum% gtr 9 (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%h%time:~3,2%m%time:~6,2%s) else (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_0%time:~1,1%h%time:~3,2%m%time:~6,2%s)

Set FileAffected=%1
echo %FileAffected:~0,-1%%timeback%

Это сделало бы файл, FILE.TXTбытьFILE.TXT_2015-03-05_11h56m32s

Но я, конечно, хочу, чтобы это было так.FILE_20150305_11h56m32s.TXT

Расширение файла может быть любым или иметь любую длину. Спасибо за любую помощь.

EDIT: FileAffected передается в кавычках, поэтому я просто удалил их, добавив ~0,-1.

Я обнаружил, что если я сделаю это:

FOR /f %%i IN (%FileAffected%) DO (
ECHO filename=%%~fi
ECHO fileextension=%%~xi
)

Если я вывожу FileAffected, я получаю полное имя пути с пробелами. Но если я использую команду FOR /F, имя файла возвращается, обрезая все после пробела. Даже добавление дополнительных кавычек к переменной "%FileAffected" в команде "IN" все равно не исправляет ситуацию, как и добавление кавычек вокруг fi или xi.

решение1

Как добавить дату и время в качестве суффикса к имени файла?

Используйте следующий пакетный файл:

@echo off
set hournum=%time:~0,2%
if %hournum% gtr 9 (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%h%time:~3,2%m%time:~6,2%s) else (set timeback=_%date:~10,4%%date:~4,2%%date:~7,2%_0%time:~1,1%h%time:~3,2%m%time:~6,2%s)
echo %~n1%timeback%%~x1

Выход:

F:\test>test file.txt
file_3/01_18h07m40s.txt

Если, например, имя вашего файла содержит пробелы, file with space.txtто вам нужновызовпакетный файл с "s вокруг имени файла, как показано ниже:

F:\test>test "file with space.txt"
file with space_3/01_18h07m56s.txt

Расширения параметров

%~n1Разверните %1 до имени файла без расширения C:\utils\MyFile или, если указан только путь (без обратной косой черты в конце), до последней папки в этом пути.

%~x1Развернуть %1 только в файл с расширением .txt

ИсточникАргументы командной строки (параметры)


Использование «двойных кавычек»

Если один параметр содержит пробелы, вы все равно можете передать его как один элемент, заключив в «кавычки» — это хорошо работает для длинных имен файлов.

Если параметр используется для указания имени файла следующим образом:

MyBatch.cmd "C:\Program Files\My Data File.txt"

Эти параметры будут следующими:

%0 = Моя партия

%1 = "C:\Program Files\Мой файл данных.txt"

ИсточникСинтаксис: экранированные символы, разделители и кавычки


Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • параметры- Аргумент командной строки (или параметр) — это любое значение, переданное в пакетный скрипт.
  • синтаксис- Экранированные символы, разделители и кавычки.

Связанный контент