使用 Batch 解决 Linux 通配符

Work around Linux wildcards with Batch

我基本上是在尝试在 Windows 批处理中实现这一行:cp */win/lib/*.dll ./bin。 Linux 很友好地让我使用这些花哨的通配符,但 Windows 不会接受任何一个。完成这项工作的最佳方法是什么? for 循环似乎有点矫枉过正,但 copy, xcopy, robocopy 似乎都没有实现那种花哨的工作。

提前致谢!

编辑:对于上下文,我正在为 mingw32-make 编写一个 Makefile,我想将一堆依赖项复制到可执行文件的文件夹中。

FOR 循环可能感觉有点矫枉过正,但我​​们在这里谈论的是批处理,所以为什么不简单地为有办法做你想做的事情而高兴呢... :) 我知道没有其他方法可以做到这一点(除了使用外部工具)。请注意,目录掩码中的反斜杠需要加倍以用于 FINDSTR 中的正则表达式,这是在第 4 行中完成的。否定字符 class 的插入符 ^ 需要转义两次,因为它被解释了两次。

编辑: 更正 .dll 不包含在 *\win\lib.

的子目录中
@ECHO OFF
SET dirmask=\win\lib
SET extension=.dll
SET regex=%dirmask:\=\%\[^^^^\]*\%extension%$
FOR /F "tokens=*" %%G IN ('DIR /S /B ^| FINDSTR /R "%regex%"') DO COPY %%G .\bin