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