如何将文件复制到编号为 (0001,0002,0003) 的父目录中具有相同名称 (pic) 的子目录
how to copy a file to child directory with same name (pic) within parent directories which are numbered (0001,0002,0003)
基本上我使用了一个批处理脚本来组织同名目录中的文件(文件:0001 -> 文件夹 0001)并在每个目录中创建了子目录 - (/folder0001/pic),现在我正在尝试处理一个每个目录(0001/pic,0002/pic)中的 jpg 文件。我尝试使用 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[=11=]01\keep_config\pic C:...\New folder\background_main L.jpg
你的问题很含糊:
- 初始布局究竟是什么,结果应该是什么?
- 我们是将一个文件
pic
复制到每个目录中,还是将不同的文件复制到与这些文件同名的目录中?
- 或者每个编号的子文件夹是否有一个文件需要复制到同一子文件夹的更深处?
- 等等
因此,我将向您展示如何遍历目录以便您可以自己复制文件
To 运行 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 /D
后面的变量名,d
代表驱动器,p
-路径,n
-名称,x
- 扩展名(如果有 - 文件夹 可以 有扩展名)
%%I 在 ("c:\TestFolder*") 中执行命令
例子
假设我们要复制
- 文件
c:\src\first\pic\my.jpg
到 c:\dst\first\pic\my.jpg
- 文件
c:\src\second\pic\my.jpg
到 c:\dst\second\pic\my.jpg
- ...等...
假设所有文件夹都已经存在,执行此操作的命令可以是:
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
)
- 第一个文件夹
%%~dpnxI
是 c:\src\first
- ...并且
%%~nxI
是 first
- 我们复制
SUBFOLDER_PATH\pic\my.jpg
到c:\dst\SUBFOLDER_NAME\pic\my.jpg
参考
见https://ss64.com/nt/for_d.html and https://ss64.com/nt/for.html
基本上我使用了一个批处理脚本来组织同名目录中的文件(文件:0001 -> 文件夹 0001)并在每个目录中创建了子目录 - (/folder0001/pic),现在我正在尝试处理一个每个目录(0001/pic,0002/pic)中的 jpg 文件。我尝试使用 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[=11=]01\keep_config\pic C:...\New folder\background_main L.jpg
你的问题很含糊:
- 初始布局究竟是什么,结果应该是什么?
- 我们是将一个文件
pic
复制到每个目录中,还是将不同的文件复制到与这些文件同名的目录中? - 或者每个编号的子文件夹是否有一个文件需要复制到同一子文件夹的更深处?
- 等等
因此,我将向您展示如何遍历目录以便您可以自己复制文件
To 运行 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 /D
后面的变量名,d
代表驱动器,p
-路径,n
-名称,x
- 扩展名(如果有 - 文件夹 可以 有扩展名)
%%I 在 ("c:\TestFolder*") 中执行命令
例子
假设我们要复制
- 文件
c:\src\first\pic\my.jpg
到c:\dst\first\pic\my.jpg
- 文件
c:\src\second\pic\my.jpg
到c:\dst\second\pic\my.jpg
- ...等...
假设所有文件夹都已经存在,执行此操作的命令可以是:
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
)- 第一个文件夹
%%~dpnxI
是c:\src\first
- ...并且
%%~nxI
是first
- 第一个文件夹
- 我们复制
SUBFOLDER_PATH\pic\my.jpg
到c:\dst\SUBFOLDER_NAME\pic\my.jpg
参考
见https://ss64.com/nt/for_d.html and https://ss64.com/nt/for.html