使用 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
我基本上是在尝试在 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