
내 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>