Los nombres de archivos que comienzan con una cadena en el formato *.txt dan error en FOR

Los nombres de archivos que comienzan con una cadena en el formato *.txt dan error en FOR

Tengo una pieza en mi secuencia de comandos por lotes de Windows. Funciona bien como:

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

Pero cuando se ejecuta en lugar de un nombre codificado de .txt, falla:

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

No quiero codificar el nombre del archivo .txt. ¿Alguien puede sugerir cómo puedo elegir un nombre de archivo que comience con "Ubicación" aquí?

Respuesta1

Cuando se ejecuta con una especificación comodín ...*.txtfalla

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

El comando anterior no funcionará porque no puedesredirigirvarios archivos (una especificación comodín) como entrada a find.

El siguiente comando funcionará:

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

Sin embargo, no creo que le brinde el resultado que espera.

Esto se debe a que su for /fcomando solo coincide con elprimerotoken en la línea, que es ----------.


¿Cómo obtengo el número de filas de una variable?

Utilice el siguiente archivo por 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!contiene el número de líneas en cada archivo coincidente.

  • reemplácelo *.txtcon su propio nombre de archivo comodín%SFTP_INDIR%\Location*.txt

  • count=!_count:~1!quita el espacio inicial _count(hay un espacio inicial porque lo estamos usando :como delimitador para obtener la última parte de cada línea).

Salida de ejemplo:

F:\test>test
5
2
7
5
39
39
75
1
5
0
11
5

F:\test>

información relacionada