Bem, há várias coisas acontecendo:
- O seu sistema está configurado para usar um idioma diferente do inglês?
No meu sistema (baseado em inglês),
o comando que você está tentando fazer é
FOR /F
, nãoFOR /G
. - Você está extraindo três (
1-3
) tokens começando com%%G
, mas você está usando%%F
,%%G
e%%H
. Nada está sendo colocado em%%F
. Altere a instruçãoFOR
para se referir a%%F
, ou altere o corpo do loop para usar%%G
,%%H
e%%I
. Exceto… -
… não faça isso. Sua abordagem é falha. Pense no que significa ter período (
.
) e espaço como delimitadores. Seus nomes de arquivos são quebrados em tokens assim:#1 #2 #3 #4 #5 ERJP00300029 3.13.jpg → ERJP00300029 3 13 jpg SRKP00100002 12.04.jpg → SRKP00100002 12 04 jpg ERJP01500001 ERJP12 10.5.jpg → ERJP01500001 ERJP12 10 5 jpg
então,
- o nome do arquivo nem sempre é igual a
part1 part2.part3
, - a extensão nem sempre é o terceiro token e, de fato,
- para seus nomes de arquivos de exemplo, nunca o terceiro token e
- nem sempre é o mesmo número de token.
Precisamos voltar a isso. - o nome do arquivo nem sempre é igual a
- O que você acha que está fazendo com o comando REN (RENAME)?
Especificamente,
Por que você está colocando
\%SourceDir%
entrepart1
epart2
? A única esperança que você tem de fazer isso funcionar é colocar%SourceDir%\
antespart1
. E observe que a barra invertida (\
) precisa ser após%SourceDir%
. - Se este é o arquivo de lote completo,
você não precisa fazer nada de especial no final.
O arquivo em lote será encerrado quando chegar ao final.
Mas, se isso faz parte de um sistema maior,
você pode querer ter um comando de término explícito no final.
Esse comando deve ser
GOTO :EOF
, nãoGOTO EOF
.
Não acumular, mas sua abordagem de tirar a saída de DIR
e imediatamente quebrá-lo em fichas é falho.
Olhando seus nomes de exemplo,
a string ERJP12 10.5
é dividida em três tokens:
ERJP12
, 10
e 5
.
Mas ERJP12.10.5
seria dividido nos mesmos tokens,
e assim seria ERJP12 10 5
e ERJP12.10 5
.
Você não pode reconstruir os nomes de arquivo originais (ou seja, atuais, existentes)
dos tokens;
você precisa capturar o nome do arquivo original intacto e, em seguida, dividi-lo.
Não vejo por que você precisa executar DIR
.
Tudo o que você precisa é de FOR %%F IN ("%SourceDir%\*.jpg") DO
;
ele dará somente os nomes de arquivos (sem subdiretórios),
e, ao contrário da saída de DIR
,
incluirá o nome do diretório de origem
(o diretório que contém os arquivos).
Agora que temos o caminho completo do arquivo atual em %%F
,
podemos começar a dividi-lo.
Agora usamos FOR /F
.
Portanto, pegue a parte n ame de %%F
,
e puxe um token que é a primeira parte a solitária.
Em seguida, renomeie o caminho completo original
para a primeira parte mais a tensão e x .
Este é o arquivo de lote completo:
SET SourceDir=F:\Ezhilarasan\Exibt\need_upload\ERHP\check
FOR %%F IN ("%SourceDir%\*.jpg") DO (
FOR /F "DELIMS=. " %%A IN ("%%~nF") DO (
REN "%%F" "%%A%%~xF"
)
)