
Ich habe ein Stück in meinem Windows-Batch-Skript. Es läuft einwandfrei wie folgt:
for /f %%C in ('Find /V /C "" ^< %SFTP_INDIR%\Location.20150528060210.txt') do set count=%%C
Wenn es jedoch anstelle des fest codierten Namens .txt ausgeführt wird, schlägt es fehl:
for /f %%C in ('Find /V /C "" ^< %SFTP_INDIR%\Location*.txt') do set count=%%C
Ich möchte den Namen der TXT-Datei nicht fest codieren. Kann mir jemand einen Vorschlag machen, wie ich hier einen Dateinamen auswählen kann, der mit „Location“ beginnt?
Antwort1
Bei Ausführung mit einer Wildcard-Spezifikation ...*.txt
schlägt dies fehl
for /f %%C in ('Find /V /C "" ^< %SFTP_INDIR%\Location*.txt') do set count=%%C
Der obige Befehl funktioniert nicht, da Sie nichtumleitenmehrere Dateien (eine Platzhalterspezifikation), die als Eingabe dienen sollen find
.
Der folgende Befehl funktioniert:
for /f %%C in ('Find /V /C "" %SFTP_INDIR%\Location*.txt') do set count=%%C
Ich glaube jedoch nicht, dass Sie dadurch das gewünschte Ergebnis erzielen.
Dies liegt daran, dass Ihr for /f
Befehl nur mit dem übereinstimmt,ErsteToken auf der Zeile, nämlich ----------
.
Wie erhalte ich die Anzahl der Zeilen in einer Variablen?
Verwenden Sie die folgende Batchdatei (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!
enthält die Anzahl der Zeilen in jeder übereinstimmenden Datei.Ersetzen Sie ihn
*.txt
durch Ihren eigenen Platzhalterdateinamen%SFTP_INDIR%\Location*.txt
count=!_count:~1!
entfernt das führende Leerzeichen (es gibt ein führendes Leerzeichen, weil wir es als Trennzeichen_count
verwenden, um den letzten Teil jeder Zeile zu erhalten).:
Beispielausgabe:
F:\test>test
5
2
7
5
39
39
75
1
5
0
11
5
F:\test>