linux - 使用 Batch 解决 Linux 通配符问题

标签 linux windows bash batch-file cp

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

提前致谢!

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

最佳答案

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

编辑:更正为不在 *\win\lib 的子目录中包含 .dll

@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

关于linux - 使用 Batch 解决 Linux 通配符问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40020591/

相关文章:

C++ 错误 : undefined reference to 'clock_gettime' and 'clock_settime'

c++ - 信号处理程序和多线程

c - 向管道写入一些随机数?

c++ - 如何在 VC++ 的 Windows 7 或 Windows 8 中延迟关机/重启/休眠

c# - 我应该在服务器上使用始终运行的控制台程序来执行任务吗

bash - 结合使用 bash 选项进行错误处理(例如 pipefail、errexit、inherit_errexit)

bash - 字段是不可变的 k8s

bash - 在大型数据集上使用 grep 或 fgrep 循环非常慢

linux - 如何在 Fedora Linux 上安装对话框实用程序?

windows - 将正斜杠附加到文件中特定行的末尾