Batch file 在批处理文件中将通配符的内容作为变量引用

Batch file 在批处理文件中将通配符的内容作为变量引用,batch-file,Batch File,我正在尝试编写一个批处理文件来复制大量文件。我希望能够获取文件并根据其文件名将其移动到特定文件夹 例如,我的目录结构如下: C:/ 福尔德拉 File1.xyz File2.xyz FolderB File3.xyz 我希望有一个批处理文件,用于查找所有*.xyz文件,并根据文件名将每个文件复制到文件夹。因此,上述文件将在以下目录中结束 File1.xyz被复制到D:/FolderA/File1/File1.xyz File2.xyz被复制到D:/FolderA/File2/Fi

我正在尝试编写一个批处理文件来复制大量文件。我希望能够获取文件并根据其文件名将其移动到特定文件夹

例如,我的目录结构如下:

  • C:/
    • 福尔德拉
      • File1.xyz
      • File2.xyz
    • FolderB
      • File3.xyz
我希望有一个批处理文件,用于查找所有*.xyz文件,并根据文件名将每个文件复制到文件夹。因此,上述文件将在以下目录中结束

File1.xyz被复制到D:/FolderA/File1/File1.xyz

File2.xyz被复制到D:/FolderA/File2/File2.xyz

File3.xyz被复制到D:/FolderB/File3/File3.xyz

我知道在批处理文件中使用FOR循环应该是可行的,但我不知道如何将通配符替换的文本作为变量使用(这样我就可以创建一个同名文件夹)。

FOR变量修饰符提供您需要的信息:

%%~D Expands to a Drive letter only.
%%~P Expands to a Path only, including an ending backslash.
%%~N Expands to the Name only.
%%~X Expands to the eXtension only.
键入/?详情请参阅

也许您需要先用以下方法复制目录结构:

XCOPY C:\ D:\ /T

看起来不错,但最好在FOR循环体中的所有路径周围加引号。否则,路径中的空格和特殊字符将出现问题。如果已经存在具有该名称的文件,则在IF和COPY语句中将\附加到目标可能更安全。不需要XCOPY,因为MD将根据需要创建任何中间目录。这回答了我的问题。我确实遇到了引用的问题,所以我添加了它们。非常感谢你们两位。
XCOPY C:\ D:\ /T