如何显示找到的地方并且只显示找到的单词 Findstr?
How to show the place and only the words found Findstr?
我想知道如何显示在 findstr 中找到单词的位置?
我的代码:
Set "LFiles=%temp%\Files\*.txt">nul 2>&1
Findstr /li /G:"List.txt" "%LFiles%">"Result.TxT"
(for /F %%a in (List.txt) do (
Findstr /li /C:"%%a" "%LFiles%" > NUL
if not errorlevel 1 echo %%a
))>"Result2.TxT"
列表:
Disc
Music
Song
Album
结果:
DISC1312we7das67da
13dsdsa67dsahdsa7aMUSIC
dsadsdfdsaSONG1223234235
结果2:
Disc
Music
Song
Result2中想要的结果:
--------------
Filelist1.txt
--------------
Song
--------------
Filelist2.txt
--------------
Song
Disc
--------------
Filelist3.txt
--------------
Disc
Music
Song
注意:文件名是随机的
@Edit
我可以让他向您展示在每个文件中找到的内容...
来了两个问题:
- 如果文件名中有空格,我如何向他显示文件名?
- 如何将同一文件的结果合并到一行中?
.
Dir /b "%temp%\Files\*.txt">Files2.txt
Set "LFiles=LFiles=%temp%\Files\*.txt">nul 2>&1
Findstr /li /G:"List.txt" "%LFiles%">"Result.TxT"
(for /F %%a in (Files2.txt) do (
(for /F %%b in (List.txt) do (
Findstr /li /C:"%%b" "Result.txt" > NUL
if not errorlevel 1 echo "%%a" "%%b"
))))>>"Result2.TxT"
当前结果:
"File" "Disc"
"File" "Song"
"File" "Music"
"Files_and" "Disc"
想要的结果
File 01.txt: Song, Music
File 02.txt: Music, Disc
或
File 01.txt:
Song
Music
File 02.txt:
Music
Disc
@echo off
setlocal enabledelayedexpansion
set "LFiles=%temp%\Files\*.txt"
(
for %%i in ("%LFiles%") do (
set "result="
for /f %%j in (list.txt) do (
findstr /li /c:"%%j" "%%~i">nul && set result=!result!, %%j
)
if defined result echo %%i:!result:~1!
)
)>result.txt
下面的解决方案只对 List.txt 文件中的每个单词执行一次 findstr
命令,因此它应该 运行 更快。它还将结果保存在 "file" 数组中以供进一步处理:
@echo off
setlocal EnableDelayedExpansion
Set "LFiles=%temp%\Files\*.txt"
for /F %%a in (List.txt) do (
for /F "delims=" %%b in ('findstr /LIM /C:"%%a" "%LFiles%"') do (
set "file[%%~Nb]=!file[%%~Nb]! %%a"
set /A "word[%%a]+=1"
)
)
(for /F "tokens=2* delims=[]=" %%a in ('set file[') do (
echo --------------
echo %%a.txt
echo --------------
for %%c in (%%b) do echo %%c
echo/
)) > Result2.txt
ECHO RESULT IN REQUESTED FORMAT:
TYPE RESULT2.TXT
ECHO/
ECHO/
ECHO VALUES STORED IN "FILE" ARRAY:
SET FILE[
ECHO WORD COUNT:
SET WORD[
编辑:按照评论中的要求计算每个文件中每个单词的数量的新方法。
@echo off
setlocal EnableDelayedExpansion
Set "LFiles=%temp%\Files\*.txt"
rem Accumulate counts of all file/word combinations in a two-dimensional array
for /F %%a in (List.txt) do (
for /F "delims=:" %%b in ('findstr /LI /C:"%%a" "%LFiles%"') do (
set /A "count[%%~Nb][%%a]+=1"
)
)
rem Group word counts for the same file
for /F "tokens=2,3* delims=[]=" %%a in ('set count[') do (
set "file[%%a]=!file[%%a]!, %%b (%%c)"
)
rem Show the final result
(for /F "tokens=2* delims=[]=" %%a in ('set file[') do (
set "line=%%b"
echo %%a.txt = !line:~2!
)) > Result2.TxT
ECHO THE COUNT ARRAY:
SET COUNT[
ECHO/
ECHO THE FILE ARRAY:
SET FILE[
这个新方法计算每个文件中匹配行的数量。如果同一个词可能在一行中出现两次或更多次,它将被计为一个。为了统计个单词,这一点可能会被修复,但是生成的代码会慢很多...
我想知道如何显示在 findstr 中找到单词的位置?
我的代码:
Set "LFiles=%temp%\Files\*.txt">nul 2>&1
Findstr /li /G:"List.txt" "%LFiles%">"Result.TxT"
(for /F %%a in (List.txt) do (
Findstr /li /C:"%%a" "%LFiles%" > NUL
if not errorlevel 1 echo %%a
))>"Result2.TxT"
列表:
Disc
Music
Song
Album
结果:
DISC1312we7das67da
13dsdsa67dsahdsa7aMUSIC
dsadsdfdsaSONG1223234235
结果2:
Disc
Music
Song
Result2中想要的结果:
--------------
Filelist1.txt
--------------
Song
--------------
Filelist2.txt
--------------
Song
Disc
--------------
Filelist3.txt
--------------
Disc
Music
Song
注意:文件名是随机的
@Edit
我可以让他向您展示在每个文件中找到的内容...
来了两个问题:
- 如果文件名中有空格,我如何向他显示文件名?
- 如何将同一文件的结果合并到一行中?
.
Dir /b "%temp%\Files\*.txt">Files2.txt
Set "LFiles=LFiles=%temp%\Files\*.txt">nul 2>&1
Findstr /li /G:"List.txt" "%LFiles%">"Result.TxT"
(for /F %%a in (Files2.txt) do (
(for /F %%b in (List.txt) do (
Findstr /li /C:"%%b" "Result.txt" > NUL
if not errorlevel 1 echo "%%a" "%%b"
))))>>"Result2.TxT"
当前结果:
"File" "Disc"
"File" "Song"
"File" "Music"
"Files_and" "Disc"
想要的结果
File 01.txt: Song, Music
File 02.txt: Music, Disc
或
File 01.txt:
Song
Music
File 02.txt:
Music
Disc
@echo off
setlocal enabledelayedexpansion
set "LFiles=%temp%\Files\*.txt"
(
for %%i in ("%LFiles%") do (
set "result="
for /f %%j in (list.txt) do (
findstr /li /c:"%%j" "%%~i">nul && set result=!result!, %%j
)
if defined result echo %%i:!result:~1!
)
)>result.txt
下面的解决方案只对 List.txt 文件中的每个单词执行一次 findstr
命令,因此它应该 运行 更快。它还将结果保存在 "file" 数组中以供进一步处理:
@echo off
setlocal EnableDelayedExpansion
Set "LFiles=%temp%\Files\*.txt"
for /F %%a in (List.txt) do (
for /F "delims=" %%b in ('findstr /LIM /C:"%%a" "%LFiles%"') do (
set "file[%%~Nb]=!file[%%~Nb]! %%a"
set /A "word[%%a]+=1"
)
)
(for /F "tokens=2* delims=[]=" %%a in ('set file[') do (
echo --------------
echo %%a.txt
echo --------------
for %%c in (%%b) do echo %%c
echo/
)) > Result2.txt
ECHO RESULT IN REQUESTED FORMAT:
TYPE RESULT2.TXT
ECHO/
ECHO/
ECHO VALUES STORED IN "FILE" ARRAY:
SET FILE[
ECHO WORD COUNT:
SET WORD[
编辑:按照评论中的要求计算每个文件中每个单词的数量的新方法。
@echo off
setlocal EnableDelayedExpansion
Set "LFiles=%temp%\Files\*.txt"
rem Accumulate counts of all file/word combinations in a two-dimensional array
for /F %%a in (List.txt) do (
for /F "delims=:" %%b in ('findstr /LI /C:"%%a" "%LFiles%"') do (
set /A "count[%%~Nb][%%a]+=1"
)
)
rem Group word counts for the same file
for /F "tokens=2,3* delims=[]=" %%a in ('set count[') do (
set "file[%%a]=!file[%%a]!, %%b (%%c)"
)
rem Show the final result
(for /F "tokens=2* delims=[]=" %%a in ('set file[') do (
set "line=%%b"
echo %%a.txt = !line:~2!
)) > Result2.TxT
ECHO THE COUNT ARRAY:
SET COUNT[
ECHO/
ECHO THE FILE ARRAY:
SET FILE[
这个新方法计算每个文件中匹配行的数量。如果同一个词可能在一行中出现两次或更多次,它将被计为一个。为了统计个单词,这一点可能会被修复,但是生成的代码会慢很多...