Batch file 在硬盘上搜索字符串并返回忽略某些目录的所有结果

Batch file 在硬盘上搜索字符串并返回忽略某些目录的所有结果,batch-file,Batch File,我有一个执行以下操作的批处理文件: 1) 在驱动器(C:D:E:F:G:)下的所有目录中搜索“关键字” 2) 返回路径不包含单词“Users”、“Desktop”和“Recyele”的结果(换句话说,忽略这些目录下的结果)。代码如下: @echo off & setLocal EnableDELAYedeXpansion for %%d in (c d e f g) do if exist %%d: ( for /f "delims=" %%a in ('dir/b/s %%d:\abc

我有一个执行以下操作的批处理文件:
1) 在驱动器(C:D:E:F:G:)下的所有目录中搜索“关键字”
2) 返回路径不包含单词“Users”、“Desktop”和“Recyele”的结果(换句话说,忽略这些目录下的结果)。代码如下:

@echo off & setLocal EnableDELAYedeXpansion
for %%d in (c d e f g) do if exist %%d: (
for /f "delims=" %%a in ('dir/b/s %%d:\abc.txt 2^>nul ^| findstr /V /C:"Recycle" /C:"Desktop" /C:"Users"') do (
set var1=!var1! %%a,
)
echo %var1%
)
endlocal
代码运行良好,只是我想返回所有结果,而不是第一个找到的结果。 我已经搜索了stackoverflow,但有一个问题是忽略结果,合并结果和findstr,但不是全部的组合。提前谢谢


@编辑-建议使用桌面搜索引擎,但不能使用额外的软件(谢谢Ark)

这里的问题是因为您在循环中添加了
EXIT
。把它拿出来

@echo off 
setLocal enabledelayedexpansion
for %%d in (c d e f g) do (
  if exist %%d: (
    for /f "delims=" %%a in ('dir/b/s %%d:\myfile.exe 2^>nul') do (
      Echo.%%a | findstr /C:"Recycle" /C:"Desktop" /C:"Users">nul || echo %1, %%a,
    )
  )
)
echo %1,,

这里的问题是因为您在循环中添加了
EXIT
。把它拿出来

@echo off 
setLocal enabledelayedexpansion
for %%d in (c d e f g) do (
  if exist %%d: (
    for /f "delims=" %%a in ('dir/b/s %%d:\myfile.exe 2^>nul') do (
      Echo.%%a | findstr /C:"Recycle" /C:"Desktop" /C:"Users">nul || echo %1, %%a,
    )
  )
)
echo %1,,

这将遍历每个驱动器,搜索文件,并排除某些结果。不要调用
exit
命令,因为这将停止脚本。还建议将管道直接插入
findstr
,以加快速度。使用findstr的
/V
选项

@echo off & setlocal EnableDelayedExpansion
for %%D in (c d e f g) do if exist %%D: (
    for /f "delims=" %%A in ('dir/b/s %%D:\myfile.exe 2^>nul ^| findstr /V /C:"Recycle" /C:"Desktop" /C:"Users"') do (
        echo %1, %%A,
    )
    echo %1,,
)
endlocal

这将遍历每个驱动器,搜索文件,并排除某些结果。不要调用
exit
命令,因为这将停止脚本。还建议将管道直接插入
findstr
,以加快速度。使用findstr的
/V
选项

@echo off & setlocal EnableDelayedExpansion
for %%D in (c d e f g) do if exist %%D: (
    for /f "delims=" %%A in ('dir/b/s %%D:\myfile.exe 2^>nul ^| findstr /V /C:"Recycle" /C:"Desktop" /C:"Users"') do (
        echo %1, %%A,
    )
    echo %1,,
)
endlocal


你为什么不使用桌面搜索引擎呢?@arkascha,这是我代码的一部分,我将对许多虚拟机执行同样的操作。手动操作太费时了为什么手动?您目前正在手动执行此操作,而搜索引擎是一个您可以直接使用的现有且可用的应用程序。您可以将此引擎配置为扫描主机系统上这些虚拟机内部使用的所有驱动器。我没有访问主机系统的权限,只有虚拟机。您提到的搜索是否可以在任何具有虚拟机远程桌面访问权限的站点上进行?顺便问一下,有可能让搜索自动化吗?很明显,使用哪种搜索引擎取决于我们谈论的桌面环境。今天的大多数桌面环境都已经有了这样的引擎。这些引擎通常在后台工作,所以有点自动。如何从他们再次构建的索引中查询结果取决于您使用的引擎……为什么不使用桌面搜索引擎呢?@arkascha Hi,这是我代码的一部分,我将对许多虚拟机执行同样的操作。手动操作太费时了为什么手动?您目前正在手动执行此操作,而搜索引擎是一个您可以直接使用的现有且可用的应用程序。您可以将此引擎配置为扫描主机系统上这些虚拟机内部使用的所有驱动器。我没有访问主机系统的权限,只有虚拟机。您提到的搜索是否可以在任何具有虚拟机远程桌面访问权限的站点上进行?顺便问一下,有可能让搜索自动化吗?很明显,使用哪种搜索引擎取决于我们谈论的桌面环境。今天的大多数桌面环境都已经有了这样的引擎。这些引擎通常在后台工作,所以有点自动。如何从它们构建的索引中查询结果取决于您使用的引擎…谢谢David,抱歉这么贪婪,可以将结果附加到变量吗?我尝试设置Var=%Var%%%%%A%,但没有成功work@Alex因此,您要将值附加到变量,而不是回显%1、%%A?您需要使用延迟扩展语法(感叹号)<代码>设置“var=!var!,%%A”另外,是否要扩展
%%A的值?如果是这样,您还需要使用延迟扩展语法<代码>!%%A回声!var1谢谢David,很抱歉这么贪婪,可以将结果附加到变量吗?我尝试设置Var=%Var%%%%%A%,但没有成功work@Alex因此,您要将值附加到变量,而不是回显%1、%%A
?您需要使用延迟扩展语法(感叹号)<代码>设置“var=!var!,%%A”另外,是否要扩展
%%A的值?如果是这样,您还需要使用延迟扩展语法<代码>!%%A回声!var1谢谢Matt你的回答也很好,但是David回答得更早(2分钟),所以我将继续他的回答。谢谢事实上,大卫比我晚了2分钟才回答。你知道这一点,因为他未经编辑的答案比我的答案高。最新的帖子首先出现。但他的答案更好,因为它的代码更简洁。:)谢谢Matt,你的回答也很好,但是David回答得更早(2分钟),所以我会继续他的回答。谢谢事实上,大卫比我晚了2分钟才回答。你知道这一点,因为他未经编辑的答案比我的答案高。最新的帖子首先出现。但他的答案更好,因为它的代码更简洁。:)