Я думал, что это будет просто, но оказалось, что это сложнее, чем я думал.
Я хочу, чтобы файл был скопирован и вставлен с добавленной временной меткой. Я получаю временную метку, используя этот код:
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.
- параметры- Аргумент командной строки (или параметр) — это любое значение, переданное в пакетный скрипт.
- синтаксис- Экранированные символы, разделители и кавычки.