【问题标题】:How to loop through a directory and skip folders containing a specific string?如何遍历目录并跳过包含特定字符串的文件夹?
【发布时间】:2018-11-16 09:59:33
【问题描述】:

我目前正在扫描整个目录,复制一个 exe 并在每个文件夹中运行它。此 exe 转换每个文件夹中的某些日志文件。但是,有一半的目录不包含任何日志文件,进入每个文件夹并运行一个什么都不做的 exe 似乎是一种浪费。一些文件夹名称的示例:

  • 0075D-S10
  • 0075D-S10-EVT
  • 0132C-S10
  • 0132C-S10-EVT
  • 等等……

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

这是我的批处理文件的 sn-p 以及它在做什么:

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”字符串的任何文件夹?

感谢您抽出宝贵时间提供帮助!

【问题讨论】:

    标签: string windows batch-file command-line


    【解决方案1】:

    嗯,您可以使用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

    【讨论】:

    • 您好,感谢您的回复。这似乎只是在循环并说“此目录无效”之前将 exe 复制到第一个文件夹。这意味着 exe 仅在一个文件夹中执行。 null 也一直在为我工作,不就是 null 可以和 cmd 和 Powershell 一起使用的区别吗?
    • 已编辑的答案,我只关注实际问题,而不是您的代码.. 请现在尝试.. 另外,null 将创建一个名为 null 的文件,其中nul 表示管道什么都没有..所以它不会显示输出。
    • 问题...我不知道 logCsv。是否必须将其复制到每个目录中?你不能用路径开关运行它吗?即LogCsv.exe %%i
    • @StevenGibb 为什么需要CD 命令?你不能用你找到的文件夹名执行程序吗? "%%i\logcsv.exe"
    • 这个单行批处理文件命令会做你想要的吗? @For /D %%A In (*) Do @PushD "%%A" 2>Nul && (Copy /Y "%~dp0LogCsv.exe">Nul&PopD)?
    猜你喜欢
    • 1970-01-01
    • 2020-05-03
    • 2020-05-19
    • 2012-10-05
    • 2023-03-23
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2018-07-27
    相关资源
    最近更新 更多