使用Batch解决Linux通配符问题

时间:2016-10-13 12:07:51

标签: linux windows bash batch-file cp

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

先谢谢!

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

1 个答案:

答案 0 :(得分:0)

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

修改:更正不在.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