以 *.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>

相關內容