【问题标题】:Copying Multiple files with specific extension复制具有特定扩展名的多个文件
【发布时间】:2017-09-10 13:32:01
【问题描述】:

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

(Windows 10 教育版 N x64)

我是 GoldSrc 引擎开发人员,我正在努力实现 使用 Batch 脚本或 PowerShell 自动执行此操作 任务本身而不是我手动选择每个该死的文件夹, 终于有空了。 :)

我的目录结构如下:

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

原来是这样的:

绝对路径:

树视图中的图像:

[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,因此两个过滤器一起过滤并从其源中复制它们 位置 [../GoldSrc/prefabs/like_100_folders_here] 到“GoldSrc” 名为“地图”的子目录,所有内容都显示在图片上)

所以我希望在这个过程之后事情看起来像这样:

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

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

提前致谢

【问题讨论】:

  • 文件不可能有“.map AND .rmf 扩展名”,只有其中之一。也许您想要具有“.map OR .rmf 扩展名”的文件...
  • StackOverflow 不是代码请求站点,它是您寻求与自己代码相关问题帮助的地方。请edit your question 提供您的问题代码,确保您选择的标签也是相关的。
  • 对不起,我忘记发布我的代码...
  • @echo off color 0a rem remark1 cd echo 按键盘上的任意键开始复制 MAP 和 RMF 文件!暂停 xcopy ../prefabs*.rmf ../prefabs/maps xcopy ../prefabs*.map ../prefabs/maps pause
  • @Aacini 我的意思不是你所暗示的:somefilename.map.rmf BUT somefilename22.map AND somefilename56.rmf

标签: file powershell batch-file copying


【解决方案1】:
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,然后将该文件复制到所需的子目录。

然后回到原来的目录。

生成的命令将简单地被echoed 到控制台。要实际执行命令(检查后),请删除 ECHO 关键字。

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

【讨论】:

  • 这是我从我的批处理知识中获得的代码... :( ,感谢您的回答
  • @echo off color 0a rem remark1 cd echo 按键盘上的任意键开始复制 MAP 和 RMF 文件!暂停 xcopy ../prefabs*.rmf ../prefabs/maps xcopy ../prefabs*.map ../prefabs/maps pause
【解决方案2】:

如果你想用 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"}

【讨论】:

  • 感谢您的 PS 代码,我试图在任何与 Windows 捆绑的命令行处理器应用程序中编写该代码,无论是 PS 还是批处理
  • 与其作为两个单独的gci 命令执行,不如执行where-object 测试。 gci "pathname" -recurse | ?{ !$_.PsIsContainer -and $_.Extension -match "map|rmf" } | %{ copy stuff }(问号是where-object的简写,就像百分号是foreach-object的简写一样。)
  • 啊,是的,这是另一种方式......我想不出一种方法可以在一个语句中将两者配对
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
  • 2016-04-26
  • 2019-03-02
  • 2019-07-21
  • 2016-06-06
  • 2015-06-12
相关资源
最近更新 更多