
Eu tenho um pedaço no meu script em lote do Windows. Funciona bem como:
for /f %%C in ('Find /V /C "" ^< %SFTP_INDIR%\Location.20150528060210.txt') do set count=%%C
Mas quando executado em vez de um nome codificado de .txt ele falha:
for /f %%C in ('Find /V /C "" ^< %SFTP_INDIR%\Location*.txt') do set count=%%C
Não quero codificar o nome do arquivo .txt. Alguém pode sugerir como posso escolher o nome do arquivo começando com "Localização" aqui?
Responder1
Quando executado com uma especificação curinga, ...*.txt
ele falha
for /f %%C in ('Find /V /C "" ^< %SFTP_INDIR%\Location*.txt') do set count=%%C
O comando acima não funcionará porque você não poderedirecionarvários arquivos (uma especificação curinga) como entrada para find
.
O seguinte comando funcionará:
for /f %%C in ('Find /V /C "" %SFTP_INDIR%\Location*.txt') do set count=%%C
No entanto, não acho que isso lhe dará o resultado que você espera.
Isso ocorre porque seu for /f
comando corresponde apenas aoprimeirotoken na linha, que é ----------
.
Como obtenho o número de linhas em uma variável?
Use o seguinte arquivo em lote (test.cmd):
@echo off
setlocal
setlocal EnableDelayedExpansion
for /f "tokens=2 delims=:" %%c in ('Find /V /C "" *.txt') do (
set _count=%%c
set count=!_count:~1!
echo !count!
)
!count!
contém o número de linhas em cada arquivo correspondente.substitua
*.txt
pelo seu próprio nome de arquivo curinga%SFTP_INDIR%\Location*.txt
count=!_count:~1!
retira o espaço inicial_count
(há um espaço inicial porque estamos usando:
como delimitador para obter a última parte de cada linha.
Exemplo de saída:
F:\test>test
5
2
7
5
39
39
75
1
5
0
11
5
F:\test>