Adicionar carimbo de data e hora ao arquivo copiado usando o Windows Batch

Adicionar carimbo de data e hora ao arquivo copiado usando o Windows Batch

Achei que seria simples, mas parece mais desafiador do que pensei.

Quero que um arquivo seja copiado e colado com um carimbo de data/hora anexado. Eu recebo o carimbo de data/hora usando este código:

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%

Isso faria com que o arquivo FILE.TXTfosseFILE.TXT_2015-03-05_11h56m32s

Mas eu obviamente quero que sejaFILE_20150305_11h56m32s.TXT

A extensão do arquivo pode ser qualquer extensão ou comprimento. Obrigado por qualquer ajuda.

EDIT: FileAffected é passado entre aspas, então apenas as removi com ~0,-1.

Eu descobri que se eu fizer isso:

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

Se eu repetir FileAffected, obtenho o nome completo do caminho com espaços. Mas se eu usar o comando FOR /F, o nome do arquivo volta truncando qualquer coisa após um espaço. Mesmo adicionar aspas extras à variável "% FileAffected" no comando "IN" ainda não resolve o problema, nem adicionar aspas ao redor do fi ou xi.

Responder1

Como adiciono a data e a hora como sufixo a um nome de arquivo?

Use o seguinte arquivo em lote:

@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

Saída:

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

Se o seu nome de arquivo contiver espaços, por exemplo file with space.txt, você precisaráchamaro arquivo em lote com "s ao redor do nome do arquivo, como segue:

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

Extensões de parâmetros

%~n1Expanda %1 para um nome de arquivo sem extensão de arquivo C:\utils\MyFile ou se apenas um caminho estiver presente (sem barra invertida) - a última pasta nesse caminho.

%~x1Expanda % 1 apenas para um arquivo eXtension - .txt

FonteArgumentos de linha de comando (parâmetros)


Usando "Aspas Duplas

Se um único parâmetro contiver espaços, você ainda poderá passá-lo como um item colocando "aspas" - isso funciona bem para nomes de arquivos longos.

Se um parâmetro for usado para fornecer um nome de arquivo como este:

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

Esses parâmetros serão:

%0 = MeuLote

%1 = "C:\Arquivos de Programas\Meu Arquivo de Dados.txt"

FonteSintaxe: caracteres de escape, delimitadores e aspas


Leitura adicional

informação relacionada