以 *.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 文件进行硬编码。有人能建议我如何在这里选择以“位置”开头的文件名吗?

答案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>

相关内容