【问题标题】:Copy file from sub subfolder to another directory将文件从子子文件夹复制到另一个目录
【发布时间】:2020-06-03 05:14:18
【问题描述】:

我有一个文件夹,上面有子文件夹和一个子文件夹,在最后一个子文件夹中,里面有图片。像这样的东西。 .

FolderMaster
|--chicken
|    |--pic
|        |--NiceChicken.png
|--cow
|    |--pic
|         |--NiceCow.png
|--bird
    |--pic
         |--NiceBird.png

。 可以将所有 *.png(我只想要图片)从 pic 文件夹(因为“FolderMaster”的每个子文件夹都有相同的子文件夹,即“pic”)复制到“FolderMaster”之外的另一个文件夹/目录,让我们只需调用 ii 'FolderOther' 吗? 我想递归方法,但不知道。 我正在尝试这个,但似乎我的方法不起作用。因为它给了我“解析错误”。 .

for /D %%A in ("E:\Picturez\test11\FolderMaster") do (
  for /D %%B in ("%%~fA\*") do (
    for /D %%C in ("%%~fB\pic") do (
    xcopy /L /I "%%~fC\*.png" E:\Picturez\test22\FolderOther"
  )
)
)

。 也许有人可以帮助我。我在 win 8.1 中执行此操作,将其写入 .bat 文件,以防此信息有帮助。

【问题讨论】:

  • 除了xcopy 行中的错字(缺少"),无需循环访问一个专用文件夹(如FolderMasterpic),因为只有动态文件夹是介于两者之间的……

标签: batch-file cmd


【解决方案1】:

您提供的脚本最明显的问题是您的第 4 行有不平衡的双引号。

@Echo Off
For /D %%A In ("E:\Picturez\test11\FolderMaster") Do (
    For /D %%B In ("%%~A\*") Do (
        For /D %%C In ("%%B\pic") Do (
            XCopy /L /I "%%~C\*.png" "E:\Picturez\test22\FolderOther"
        )
    )
)

不过,您可以稍微整理一下:

@For /D %%A In ("E:\Picturez\test11\FolderMaster"
) Do @For /D %%B In ("%%~A\*"
) Do @For /D %%C In ("%%B\pic"
) Do @XCopy /L /I "%%~C\*.png" "E:\Picturez\test22\FolderOther"

或者最好还是缩短为:

@For /D %%A In ("E:\Picturez\test11\FolderMaster\*"
) Do @For /D %%B In ("%%A\pic"
) Do @XCopy /L /I "%%~B\*.png" "E:\Picturez\test22\FolderOther"

可以进一步缩短为:

@For /D %%A In ("E:\Picturez\test11\FolderMaster\*"
) Do @XCopy /L /I "%%A\pic\*.png" "E:\Picturez\test22\FolderOther"

一旦您对输出感到满意,您显然会从XCopy 命令中删除/L 选项。


最后,如果这些是目标树中唯一的 png 文件,那么以下内容可能对您同样有用:
@For /R "E:\Picturez\test11\FolderMaster" %%A In ("*.png"
) Do @Echo=Copy /Y "%%A" "E:\Picturez\test22\FolderOther"

在最后一个示例中,当您对输出感到满意时,您将删除 Echo=

【讨论】:

  • 虽然我喜欢循序渐进的方法来得出最优解(最后一个xcopy),但我不同意你对“整洁”的解释;从可读性的角度来看,你的第一个代码 sn-p 是最好的,你不觉得吗?更少的行不一定能写出更好的代码……
  • 通过整洁的@aschipfl,我的意思是删除不必要的括号,它减少行数的事实只是其副作用。不过,要具体回答您的问题,不,我更喜欢所有这些问题而不是第一个问题。我认为没有必要打开带括号的块,除非其中发生了不止一件事,或者它是有条件的,而另一个条件是遵循它。
猜你喜欢
  • 1970-01-01
  • 2013-09-04
  • 2012-03-04
  • 2014-07-25
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多