我的 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>