2012-02-14 124 views
0

我想编写一个批处理文件来复制大量文件的一个变量的内容。我希望能够根据文件名将文件移动到特定的文件夹。参考通配符作为批处理文件

例如,我有一个这样的目录结构:

  • C:/
    • FolderA
      • File1.xyz
      • File2.xyz
    • FolderB中
      • File3.xyz

我想有一个批处理文件,根据其文件名查找所有名为* .xyz文件,并将它们复制到每一个文件夹。所以上面的文件将会在下面的目录中结束。

File1.xyz被复制到d:/ FolderA/File1中 /File1.xyz

File2.xyz被复制到d:/ FolderA/文件2 /File2.xyz

File3.xyz被复制到d:/ FolderB中/ 文件3 /File3.xyz

我知道这应该使用FOR批处理文件循环是可能的,但我不知道如何采取由外卡替换的文本,并把它作为一个变量(这样我就可以创建具有相同名称的文件夹。 )

回答

1
for /R C:\ %%f in (*.xyz) do (
    if not exist D:%%~Pf%%~Nf md D:%%~Pf%%~Nf 
    copy %%f D:%%~Pf%%~Nf/%%~NXf 
) 

的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 
+0

看起来不错,但最好把周围所有路径引号的体内循环。否则在路径中会出现空格和特殊字符的问题。在IF和COPY语句中,如果文件已经以该名称存在,可能会安全地追加\目标。不需要XCOPY,因为MD将根据需要创建任何中间目录。 – dbenham 2012-02-15 12:55:29

+0

这回答了我的问题。我遇到了引号问题,所以我添加了它们。非常感谢你们两位。 – 2012-02-15 17:00:31

相关问题