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

1

Eu tenho um pedaço no meu script de lote do windows. Corre 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

Eu 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?

Novice
fonte

Respostas:

1

Quando executado com uma especificação curinga de ...*.txt 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 pode redirecionar vários arquivos (uma especificação curinga) para ser a entrada para find.

O seguinte comando funcionará:

for /f %%C in ('Find /V /C "" %SFTP_INDIR%\Location*.txt') do set count=%%C

No entanto, eu não acho que isso vai te dar a saída que você está esperando.

Isso é porque o seu for /f comando corresponde apenas ao primeiro token na linha, que é ----------.


Como faço para obter o número de linhas em uma variável?

Use o seguinte arquivo em lotes (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.

  • substituir *.txt com seu próprio nome de arquivo curinga %SFTP_INDIR%\Location*.txt

  • count=!_count:~1! tira o espaço principal de _count (existe um espaço líder porque estamos usando : como um 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>
DavidPostill
fonte
David, para / f %% C em ('Encontrar / V / C ""% SFTP_INDIR% \ Local * .txt') do set count = %% C não funcionou. a variável "count" não buscou nenhum valor. Existe uma maneira alternativa de contar o número de linhas em um arquivo, fornecendo uma especificação de caractere curinga, assumindo que haja apenas um arquivo começando com Location? meus arquivos geralmente terão o formato Location. & lt; time_stamp & gt; .txt, portanto, preciso escrever um código geral para executar no arquivo Location com qualquer timestamp.
Novice
sim. Eu preciso obter apenas o número de linhas em uma variável.
Novice