
У меня есть кусок в моем пакетном скрипте Windows. Он отлично работает как:
for /f %%C in ('Find /V /C "" ^< %SFTP_INDIR%\Location.20150528060210.txt') do set count=%%C
Но при запуске вместо жестко заданного имени .txt происходит сбой:
for /f %%C in ('Find /V /C "" ^< %SFTP_INDIR%\Location*.txt') do set count=%%C
Я не хочу жестко кодировать имя файла .txt. Может кто-нибудь подсказать, как мне выбрать имя файла, начинающееся с "Location" здесь?
решение1
При запуске с подстановочным знаком происходит ...*.txt
сбой
for /f %%C in ('Find /V /C "" ^< %SFTP_INDIR%\Location*.txt') do set count=%%C
Приведенная выше команда не будет работать, потому что вы не можетеперенаправитьнесколько файлов (шаблонная спецификация) в качестве входных данных для find
.
Следующая команда будет работать:
for /f %%C in ('Find /V /C "" %SFTP_INDIR%\Location*.txt') do set count=%%C
Однако я не думаю, что это даст вам тот результат, на который вы рассчитываете.
Это потому, что ваша for /f
команда соответствует толькопервыйтокен на линии, который является ----------
.
Как получить количество строк в переменной?
Используйте следующий пакетный файл (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!
содержит количество строк в каждом совпадающем файле.замените
*.txt
на свое собственное имя файла с подстановочными знаками%SFTP_INDIR%\Location*.txt
count=!_count:~1!
удаляет начальный пробел_count
(он есть, потому что мы используем его:
в качестве разделителя для получения последней части каждой строки).
Пример вывода:
F:\test>test
5
2
7
5
39
39
75
1
5
0
11
5
F:\test>