如何遍历目录并跳过包含特定字符串的文件夹?

时间:2018-11-16 09:59:33

标签: string windows batch-file command-line

我当前正在扫描整个目录,将exe复制并在每个文件夹中运行它。该exe转换每个文件夹中的某些日志文件。但是,一半的目录不包含任何日志文件,移动到每个文件夹并运行不执行任何操作的exe文件似乎很浪费。某些文件夹名称的示例:

  • 0075D-S10
  • 0075D-S10-EVT
  • 0132C-S10
  • 0132C-S10-EVT
  • 依此类推...

我基本上只需要将可执行文件复制到名称中不包含EVT的文件夹中。这些只包含目前对我来说并不重要的evtx文件。

这是我的批处理文件及其执行的摘要:

set back=%cd%
set current_dir=%cd%
setlocal EnableDelayedExpansion
for /d %%i in ("%current_dir%\*") do (
   copy LogCsv.exe "%%i" >NULL
   cd "%%i"
   LogCsv.exe
   )
cd %back%

我真的是第一次使用批处理文件,并且我一直在这里寻找答案,但是找不到针对此特定问题的解决方案。我该如何循环此目录,但不包括名称中包含“ EVT”字符串的所有文件夹?

感谢您抽出宝贵的时间来协助您!

1 个答案:

答案 0 :(得分:2)

好吧,您可以使用findstr /v从搜索结果中排除某些值。

@echo off
set back=%cd%
set current_dir=%cd%
for /f %%i in ('dir /b /ad %current_dir%\* ^| findstr /v EVT') do (
     copy LogCsv.exe "%%i" >NUL
     cd "%%i"
     LogCsv.exe
     cd %back%
)

还请注意,您需要通过管道传输到nul而不是null