复制具有特定扩展名

时间:2017-09-10 13:32:02

标签: file powershell batch-file copying

所以我有这个小问题......

(Windows 10 Education N x64)

我是GoldSrc引擎开发者,我正在努力实现这一目标  使用批处理脚本或PowerShell执行以下操作,自动执行此操作  任务本身而不是我手动挑选每个该死的文件夹,  最终是业余时间。 :)

我的目录结构如下:

主(根)文件夹名称" GoldSrc"位于桌面"

所以它是这样的:

绝对路径:

来自TREE​​ VIEW的图片:

Image from TREE VIEW

[Main folder]
C:\Users\Andrej Poženel\Desktop\GoldSrc

[Source directory to copy from with recursive subdirectories]
C:\Users\Andrej Poženel\Desktop\GoldSrc\prefabs

[Directory to copy to]
C:\Users\Andrej Poženel\Desktop\GoldSrc\Maps

我想查找名为" prefabs"的子文件夹并搜索所有  该目录中的子文件夹,用于具有文件扩展名.map的文件  AND .rmf,所以两者一起过滤并从源头复制它们  location [../GoldSrc/prefabs/like_100_folders_here] to" GoldSrc"  子目录名为"地图",图片上显示的所有内容)

所以我想在这个过程之后看起来像这样:

C:\Users\myusername\Desktop\GoldSrc\Maps:blabla.map bleble.rmf  bleble.rmf cacac.rmf adasdad.map ...

而不是每个文件都在自己的目录中,就像它在源目录中一样......

提前致谢

2 个答案:

答案 0 :(得分:0)

pushd "C:\Users\myusername\Desktop\GoldSrc"
for /f "delims=" %%a in ('dir /s /b /a-d .\prefabs\*.map .\prefabs\*.rmf')  do ECHO copy "%%a" ".\maps\"
popd

应该执行此操作。

首先移动到所需的子目录,然后执行目录扫描,包括基本形式的子目录和排除目录名。对于匹配任一文件规范的每个返回行,将找到的名称分配给%%a,然后将该文件复制到所需的子目录。

然后返回原始目录。

生成的命令只是echo到控制台。要实际执行命令(检查后),请删除ECHO关键字。

请注意,这是一个批处理文件,并不打算直接从提示符执行。

答案 1 :(得分:0)

如果您想以Powershell的方式进行,可以使用以下代码

gci "C:\Users\Andrej Poženel\Desktop\GoldSrc\prefabs" -filter *.map | %{
copy-item -Path $_.FullName -Destination "C:\Users\Andrej Poženel\Desktop\GoldSrc\Maps"}

gci "C:\Users\Andrej Poženel\Desktop\GoldSrc\prefabs" -filter *.rmf | %{
copy-item -Path $_.FullName -Destination "C:\Users\Andrej Poženel\Desktop\GoldSrc\Maps"}

gci "C:\Users\Andrej Poženel\Desktop\GoldSrc\prefabs" -recurse | ?{
!$_.PsIsContainer -and $_.Extension -match "map|rmf" } | %{
copy-item -Path $_.FullName -Destination "C:\Users\Andrej Poženel\Desktop\GoldSrc\Maps"}