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.TXT
fosseFILE.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
%~n1
Expanda %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.
%~x1
Expanda % 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
- Um índice AZ da linha de comando do Windows CMD- Uma excelente referência para todas as coisas relacionadas à linha cmd do Windows.
- parâmetros- Um argumento (ou parâmetro) de linha de comando é qualquer valor passado para um script em lote.
- sintaxe- Caracteres de escape, delimitadores e citações.