
私の 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 ファイルの名前をハードコードしたくありません。ここで「Location」で始まるファイル名を選択する方法を教えてください。
答え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>