nomes de arquivos começando com uma string no formato *.txt dão erro em FOR

nomes de arquivos começando com uma string no formato *.txt dão erro em FOR

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, ...*.txtele 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 /fcomando 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 *.txtpelo 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>

informação relacionada