Windows 批处理:将文件从具有特定文件名的不同子文件夹复制到其他目标

Windows 批处理:将文件从具有特定文件名的不同子文件夹复制到其他目标,windows,batch-file,copy-paste,Windows,Batch File,Copy Paste,我完全是初学者,需要在windows中复制文件的帮助。我在不同的子文件夹中有xlsx文件。我要复制(但不限于)到“报告评估工具”的文件名。我想复制包含该名称的所有文件,并将它们带到平面源目标(不需要文件夹结构) 来源:c:\users\name\desktop\upload 目标:c:\users\source\desktop\tool 到目前为止,我已经尝试了以下方法 cd /D "c:\users\jubalkheimer\desktop\upload" @for /r %%a in ("*

我完全是初学者,需要在windows中复制文件的帮助。我在不同的子文件夹中有xlsx文件。我要复制(但不限于)到
“报告评估工具”
的文件名。我想复制包含该名称的所有文件,并将它们带到平面源目标(不需要文件夹结构)

来源:c:\users\name\desktop\upload
目标:c:\users\source\desktop\tool

到目前为止,我已经尝试了以下方法

cd /D "c:\users\jubalkheimer\desktop\upload" @for /r %%a in ("*Reporting Assessment Tool.xlsx") do ( 
copy "%%a" "c:\users\jubalkheimer\desktop\tool\"%%~a")
我没有收到错误消息,但无法复制文件

你能帮忙吗?
非常感谢

此任务的批处理文件代码可能是:

@echo off
for /R "%USERPROFILE%\desktop\upload" %%I in ("*Reporting Assessment Tool.xlsx") do (
    copy /-Y "%%I" "%USERPROFILE%\desktop\tool\%%~nxI"
)
这也可以通过批处理文件中的单个命令行完成:

@for /R "%USERPROFILE%\desktop\upload" %%I in ("*Reporting Assessment Tool.xlsx") do @copy /-Y "%%I" "%USERPROFILE%\desktop\tool\%%~nxI"
区分大小写的循环变量
I
在每个循环上保存文件名,该文件名具有完整路径,在指定目录或与文件名模式匹配的该目录的任何子目录中不包含双引号
*Reporting Assessment Tool.xlsx

要复制查找到的文件并提示批处理文件的用户覆盖目标目录中已存在的同名文件,必须将分配给循环变量的字符串指定为第一个参数,将目标路径指定为第二个参数,仅指定查找到的无路径文件的文件名和文件扩展名。这说明了在复制命令行上使用
“%%I”
(扩展名和完整路径用双引号括起来的文件名)和
“目标路径\%%~nxI”
(仅文件名和文件扩展名用双引号括起来的固定目标路径)

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • 复制/?
  • echo/?
  • 获取/?
%USERPROFILE%
引用预定义的环境变量
USERPROFILE
,该变量保存当前用户帐户的概要文件目录路径

如果不使用Windows资源管理器使用批处理文件,也很容易完成此任务

  • 导航到文件夹
    %USERPROFILE%\desktop\upload
  • 在该文件夹中搜索
    *Reporting Assessment Tool.xlsx

    Windows资源管理器会自动在该文件夹和所有子文件夹中搜索与此文件名模式匹配的文件
  • 使用Ctrl+A(全选)选择所有找到的文件
  • 准备使用Ctrl+C(复制)复制所有选定文件
  • 导航到文件夹
    %USERPROFILE%\desktop\tool
  • 使用Ctrl+V(粘贴)粘贴准备复制的文件,这将导致现在复制文件

  • 谢谢-代码添加。在原始注释中,在
    *Reporting Assessment Tool.xlsx
    周围加上引号,并将
    “%%a”
    替换为
    “%%a”
    ;否则空格会干扰……还有一个小提示:不要通过双击来启动脚本;相反,打开一个命令提示符窗口,移动到父路径,并通过键入脚本名称来运行脚本;所以你可以看到它的输出和错误信息…我已经更新了上面的代码。可以?我试图通过双击来运行它-它不起作用。我不知道命令提示符窗口中建议的ro类型…我只是注意到
    copy
    命令前面有一个
    echo
    ,它只显示
    copy
    命令行;移除回声,它就会工作了…谢谢!成功了。非常感谢您的解释!