String 用于在目录和所有子目录中查找字符串的批处理脚本
我想编写一个批处理文件,它使用find命令在父目录和所有子目录中查找字符串,并将输出打印到文本文件中,完成后打开文本文件。到目前为止,我的代码如下所示:String 用于在目录和所有子目录中查找字符串的批处理脚本,string,directory,root,String,Directory,Root,我想编写一个批处理文件,它使用find命令在父目录和所有子目录中查找字符串,并将输出打印到文本文件中,完成后打开文本文件。到目前为止,我的代码如下所示: @echo off set /p "var1= Enter the String to Find: " for /F "delims=" %a in ('dir /B /S *.txt') do @(find /i "%var1" "%a" 1>nul 2>&1 && find /i "%var1" "%a"
@echo off
set /p "var1= Enter the String to Find: "
for /F "delims=" %a in ('dir /B /S *.txt') do @(find /i "%var1" "%a" 1>nul 2>&1 && find /i "%var1" "%a") >> result.txt
start result.txt
但这目前甚至没有写入任何内容到result.txt,即使我确信我搜索字符串的位置会出现在多个.txt文件中。我知道这一定是语法方面的问题,但我似乎无法理解。您的脚本中有一些错误:
set
命令的等号后面不应有空格。具体来说,请删除set/p“var1=
之后的空格%var%
代替%var%
find
result.txt
就不会被find
搜索
请注意,对于从文件运行批处理脚本,在使用循环变量时需要使用双百分号,例如:%%a
不管怎样,这里有一个固定的脚本,希望能实现您的目标:
@echo off
set RESULT_FILE="result.txt"
set /p "var1=Enter the String to Find: "
pushd %~p0
type NUL > %RESULT_FILE%.tmp
for /f "delims=" %%a in ('dir /B /S *.txt') do (
for /f "tokens=3 delims=:" %%c in ('find /i /c "%var1%" "%%a"') do (
for /f "tokens=*" %%f in ('find /i "%var1%" "%%a"') do if %%c neq 0 echo %%f
)
) >> "%RESULT_FILE%".tmp
move %RESULT_FILE%.tmp %RESULT_FILE% >nul 2>&1
:: Open the file
"%RESULT_FILE%"
popd
刚刚找到abc*
相比之下,findstr/v将在没有abc的情况下全部打印是否有任何方法可以让脚本搜索脚本文件实际所在的目录和子目录。目前,如果我以管理员身份运行此操作,它只会在system32文件夹中查找文件,但我将脚本放在外部硬盘上的文件夹中,并希望在那里搜索。I类似这样的设置路径名=“U:\some\U文件夹”“cd/d%Pathname%,但它似乎被卡住了,没有写入任何内容。实际上,在第一行之后插入一行
pushd%~p0
,并在脚本的最后插入一行popd
。”。它将当前目录更改为%~p0
,扩展到脚本所在的目录,然后在脚本完成后更改回上一个目录。啊,我看到了查找所有工作,但它仍然打印目录中每个文本文件的路径,即使.txt不包含字符串。如果查找成功,有没有办法让它只写入result.txt?我相信有更好的解决方案可以避免双重调用find
。。。不管怎样,我很高兴你发现它很有用。