
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 ...*.txt
falla
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 /f
comando 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
*.txt
con 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>