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. 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

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?

    
por Novice 14.07.2015 / 15:49

1 resposta

1

Quando executado com uma especificação curinga de ...*.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 pode redirecionar vários arquivos (uma especificação de 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, não acho que isso lhe dará a saída que você espera.

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

Como obtenho o número de linhas em uma variável?

Use o seguinte arquivo de 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 por seu próprio nome de arquivo curinga %SFTP_INDIR%\Location*.txt

  • count=!_count:~1! retira o espaço inicial de _count (há um espaço principal 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>
    
por 14.07.2015 / 16:10