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

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

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

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

РЕДАКТИРОВАТЬ: FileActed передается с кавычками, поэтому я просто удалил их с ~ 0, -1.

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

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

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

1 ответ1

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 только до файла eXtension - .txt

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


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

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

Если параметр используется для предоставления имени файла, подобного этому:

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

Эти параметры будут:

% 0 = MyBatch

% 1 = "C:\Program Files\My Data File.txt"

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


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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .