我正在尝试找到一种方法将所有* .exe文件(以及更多,* .dtd,* .obj等)从目录结构复制到另一个路径。
例如我可能有:
Code
\classdirA
\bin
\classA.exe
\classdirB
\bin
\classB.exe
\classdirC
\bin
\classC.exe
\classdirD
\bin
\classD.exe
我想将所有* .exe文件复制到一个目录中,比如c:\bins
最好的方法是什么?
我系统的约束是:
任何人都知道我应该在这看什么?
答案 0 :(得分:5)
只需使用方法Dir::glob
在Ruby中执行:
# this will give you all the ".exe" files recursively from the directory "Code".
Dir.glob("c:/Code/**/*.exe")
**
- 递归匹配所有目录。这用于下降到目录树并查找当前目录的子目录中的所有文件,而不仅仅是当前目录中的文件。这个通配符在示例代码中进行了探讨。
*
- 匹配零个或多个字符。只包含星号而没有其他字符或通配符的glob将匹配当前目录中的所有文件。星号通常与文件扩展名结合使用,如果不是更多字符则缩小搜索范围。
好的博客Using Glob with Directories。
现在将文件复制到所需目录,您需要查看方法FileUtils.cp_r
:
require 'fileutils'
FileUtils.cp_r Dir.glob("c:/Code/**/*.exe"), "c:\\bins"
我刚刚测试过,FileUtils.cp
方法也适用,在这种情况下:
require 'fileutils'
FileUtils.cp Dir.glob("c:/Code/**/*.exe"), "c:\\bins"
我的偏好是使用::cp
方法。因为Dir::glob
实际上是递归地收集具有.exe
扩展名的所有文件,并将它们作为数组返回。现在cp
方法就足够了,现在只需从数组中获取每个文件并将其复制到目标文件。
为什么我不喜欢这种情况,方法::cp_r
?
好的,我也在这里解释一下。正如方法名称所示,它会将 所有 文件从源递归复制到目标目录。如果需要递归地复制特定文件,那么::cp_r
将无法通过自己的能力执行此操作(因为它无法自行选择,::glob
可以执行此操作。因此,在这种情况下,您必须为其指定特定的文件列表,然后将其复制到目标目录。如果这是唯一的任务,我必须这样做,然后我认为我们应该使用::cp
,而不是::cp_r
。
希望我的解释有所帮助。
答案 1 :(得分:2)
从cmd
命令行
for /r "c:\code" %f in (*.exe) do copy "%~ff" "c:\bins"
要在批处理文件中使用,请将百分号加倍(%%
而不是%
)
答案 2 :(得分:1)
Windows shell(cmd
)命令:
for /r code %q in (*.exe) do copy "%q" c:\bin
如果将%
字符放在批处理文件中,请加倍。