*.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 ファイルの名前をハードコードしたくありません。ここで「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>

関連情報