首页 > 解决方案 > 如何将文件复制到编号为(0001,0002,0003)的父目录中具有相同名称(pic)的子目录

问题描述

基本上我使用批处理脚本来组织具有相同名称的目录中的文件(文件:0001 -> 文件夹 0001)并在每个目录中创建子目录 -(/folder0001/pic),现在我正在尝试处理每个目录中的 jpg 文件( 0001/图片,0002/图片)。我尝试使用 xcopy,但它不起作用。

这是我使用的批处理脚本。

@echo off
for %%i in (*) do (
 if not "%%~ni" == "organize" (
  md "%%~ni\keep_config\pic" && move "%%~i" "%%~ni\keep_config" "%%~d";
  
 )
)

我尝试使用此脚本进行复制。

xcopy /s C:\...\New folder\0001\keep_config\pic C:...\New folder\background_main L.jpg

标签: batch-filescript

解决方案


你的问题很模糊:

  • 最初的布局到底是什么,结果应该是什么?
  • 我们是将一个文件复制pic到每个目录中,还是将不同的文件复制到与这些文件同名的目录中?
  • 还是每个编号的子文件夹都有一个文件需要在同一个子文件夹中更深地复制?
  • ETC

因此,我将向您展示如何遍历目录,以便您可以自己复制文件

要在您COMMAND的每个子文件夹上运行,c:\TestFolder请编写:

for /D %%I in ("c:\TestFolder\*") do COMMAND

这里:

  • for表示COMMAND将执行多次

  • /D指定遍历目录名,而不是文件名

  • %%I是您可以在您的中使用的变量COMMAND- 它将依次替换为每个目录

  • in ("c:\TestFolder\*")意味着我们正在遍历文件夹中的每个子文件夹c:\TestFolder\

    • *如果您希望按名称过滤子文件夹,请更改为另一个通配符
  • 最后,替换COMMAND为将为每个子文件夹执行一次的命令,它可以有任意参数,包括:

    • %%~dpnxI将替换为子文件夹的完整路径(不带双引号)
    • %%~nxI将仅替换为子文件夹的名称(不带双引号)
    • I是后面的变量名for /Dd代表驱动器,p-路径,n-名称,x-扩展名(如果有的话-文件夹可以有扩展名)
  • %%I in ("c:\TestFolder*") 执行命令

例子

假设我们要复制

  • 文件c:\src\first\pic\my.jpgc:\dst\first\pic\my.jpg
  • 文件c:\src\second\pic\my.jpgc:\dst\second\pic\my.jpg
  • ...ETC...

假设所有文件夹都已经存在,执行此操作的命令可以是:

for /D %%I in ("c:\src\*") do copy /b /y "%%~dpnxI\pic\my.jpg" "c:\dst\%%~nxI\pic\my.jpg"

在这里,我们:

  • 循环遍历内部的每个文件夹c:\src(即c:\src\first,,c:\src\second但不是c:\src\first\pic
    • 对于第一个文件夹%%~dpnxIc:\src\first
    • ...并且%%~nxIfirst
  • 我们复制SUBFOLDER_PATH\pic\my.jpgc:\dst\SUBFOLDER_NAME\pic\my.jpg

参考

https://ss64.com/nt/for_d.htmlhttps://ss64.com/nt/for.html


推荐阅读