我试图创建一个批处理文件,该文件遍历文件夹中的每个文本文件,并在每行中查找特定单词,例如“msg”“file”“size”。如果找到这些单词,那么它会发送给我一封电子邮件。
我使用SQL服务器发送电子邮件,我从我的批处理文件中调用电子邮件存储过程,如下所示:
set MYDB= yourDBname
set MYUSER=youruser
set MYPASSWORD=yourpassword
set MYSERVER=yourservername
sqlcmd -S %MYSERVER% -d %MYDB% -U %MYUSER% -P %MYPASSWORD% -h -1 -s "," -W -Q "exec yourstoredprocedure"
我只需要帮助编写脚本来检查每个.txt文件中每行的特定单词
答案 0 :(得分:0)
试试这个批处理文件:
@echo off
Title Search String into text files
Set "ROOT=%~dp0"
set "String2Search=msg size file"
For %%a in (%String2Search%) do (
FOR /f "delims=" %%f IN ('dir /b /s "%ROOT%\*.txt"') DO (
(find /I "%%a" "%%f" >nul 2>&1) && ( Call :FoundString "%%a" "%%f" ) || ( Call :NoFound "%%a" "%%f" )
)
)
pause & exit
::*************
:FoundString
echo found %1 on file %2
goto :eof
::*************
:NoFound
echo no string like %1 found on file %2
goto :eof
::*************
答案 1 :(得分:0)
很少有建议,因为我无法评论。几年前我做了一个项目,我不得不用特定的扩展名做搜索文件并阅读它们以找到特定的单词并用它们做点什么。我只记得很少的东西。我希望它可以帮助你。 要查找所有txt文件:
find /home/user/Downloads/etc -name '*txt'
要读取整个文件并搜索“msg”“file”“size”:
while read -r LINE
do
grep -i "msg" | grep -i "file" | grep -i "size"
检查一行中的所有内容 或者你可以在没有“流水线”的情况下逐个执行。 P.S我没有安装linux,否则我会在发布前检查。如果不正确的话。
答案 2 :(得分:0)
这应该做的工作:
@ECHO OFF
CD C:\wherever\your\.txt\files\are\at
FOR /R %%G IN ("*.txt") DO (FINDSTR /I /C:"msg" /C:"file" /C:"size" "%%G" >nul && GOTO match_found)
GOTO no_match
:match_found
ECHO Match found^!
set MYDB= yourDBname
set MYUSER=youruser
set MYPASSWORD=yourpassword
set MYSERVER=yourservername
sqlcmd -S %MYSERVER% -d %MYDB% -U %MYUSER% -P %MYPASSWORD% -h -1 -s "," -W -Q "exec yourstoredprocedure"
:no_match
ECHO No match found^!
PAUSE
如果批处理文件与.txt
文件位于同一文件夹中,则可以删除CD
行。
如果搜索区分大小写,请删除/I
选项。
答案 3 :(得分:0)
为了满足您提出的问题,这应该足够了:
@Echo Off
FindStr /IR "\<msg\> \<file\> \<size\>" "C:\Users\NT-Hero\*.txt">Nul||Exit /B
Rem Your 'match found' commands here
如果您还想在子目录中搜索,请将FindStr
选项更改为/SIR
。 (有关更多选项,请参阅FindStr /?
。)