Имена файлов, начинающиеся со строки в формате *.txt, приводят к ошибке в FOR

Имена файлов, начинающиеся со строки в формате *.txt, приводят к ошибке в FOR

У меня есть кусок в моем пакетном скрипте 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>

Связанный контент