1

У меня есть кусок в моем пакетном скрипте 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. Может кто-нибудь предложить, как я могу выбрать имя файла, начинающееся с "Расположение" здесь?

1 ответ1

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>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .