在路径中使用通配符复制文件

Skc*_*ssm 25 batch-file

假设存在目录结构C:\ users\myuser\Desktop\bob\marley.

在Windows中,从起始目录C:\ users\myuser\Desktop我可以执行"cd bo*\mar*"并cd进入bob\marley目录.但是,我不能做一个"复制bo*\mar*C:\"

我需要在路径中使用带有通配符的copy,xcopy或某些标准windows命令将匹配目录复制到目标.我不确定这是否是复制和xcopy的限制,或者我是否有错误的语法.我也试过"xcopy/E/I bo*\mar**C:\ somedirectory".

dbe*_*ham 24

不 - 你不能用COPY或XCOPY做到这一点.你要问的是一个根本的缺陷.

如果你还有一个名为"boston\marathon"的目录怎么办?您要从哪个目录中复制?

你可能会回答 - "我想要两个".但现在你有一个讨厌的潜在问题.如果两个源目录都包含名为"test.txt"的文件,该怎么办?您的目的地中只能有一个名为"test.txt"的文件.你保留哪一个?没有正确的答案,这就是为什么命令被设计为不允许你试图做的事情的一个很好的理由.

附录

如果您愿意假设只有一个文件夹与模式匹配,那么您已经知道了通过以下方式实现目标的所有步骤.

@echo off
cd bo*\ma*
xcopy * c:\somedirectory
Run Code Online (Sandbox Code Playgroud)

如果您想返回到您开始的地方,请使用PUSHD/POPD而不是CD

@echo off
pushd bo*\ma*
xcopy * c:\somedirectory
popd
Run Code Online (Sandbox Code Playgroud)

但是,你应该非常小心.波士顿\马拉松可能存在,PUSHD和CD都没有任何迹象表明存在潜在问题.


Rus*_*ure 7

RusF.注意:

使用XCOPY,不再可以在目录的文件名中使用通配符,然后只需将一组具有相似名称的目录复制到存档或网络结构中.

(提示:如果您正在管理大量数据,您希望始终这样做.例如,视频或电影文件(许多文件可能与制作相关联.或者,价格历史数据文件,各种格式,或者来自各种研究项目或实验工作的数据库文件.)

我确信我曾经能够使用较旧的XCOPY执行此操作,但升级(为了安全),文件名中的通配符,无法正常工作(即,您可以使用"/ t"选项构建目录结构,但你无法在目录中获取该死的文件进行迁移!该死的烦人.)

好吧,我们在农场,总能找到解决方案.即使需要使用.44 magnum或Styer 50. :)

那么,接下来是我提出的:

假设你有一堆名为"Fark_1,Fark_2,Fark-Special,Fark_in_the_Park,Fark99 ......"等目录.

如果所有这些"Fark ..."目录都存在于C:\磁盘上,并且您希望将此子结构的副本迁移到网络上的存档磁盘(比如称为"h:"),则可以只需执行以下操作:

从Windows(MS-DOS)命令提示符运行FOR DO:

 c:\>  XCOPY  fark*  h: /s /e /f /t

            The /s /e are for copying subdirs
            and empty directories, the /f says to
            show the files, and the /t says to only
            copy the disk directories.  No XCOPY
            option seems to exist anymore to copy the
            disk structure AND the files in the
            directories.
Run Code Online (Sandbox Code Playgroud)

要获取要复制的文件,请从Windows命令提示符执行以下操作:

 FOR /d %a in (fark*) DO XCOPY "%a" h:%a\ /s /e /f /h /k /y

            The /d says we are using directory names.
            The %a is the variable name, substituted
            into the command script for XCOPY. Make
            sure to use whatever logical name or drive
            letter you have for your archive structure.
            (ie. don't use h: in the above command,
            unless you have mapped h: to the place on
            the network where you want to copy your
            files to.)  And note, the /y option means
            overwrite any files already there.
Run Code Online (Sandbox Code Playgroud)

是的,这是老式的unix/dos东西,但是它可以工作,你可以把它放到一个批处理工作中.而且你可以避免成为完成工作的小鼠.(点,点击,咕噜,诅咒.重复.使用GUI的规范过程,对吧?)现在,有很多奇特的方法可以做到这一点.和各种工具如Robocopy,XXcopy等.但是这样就完成了,如果你有任何Windows副本,你可能已经有了XCOPY和FOR-DO的东西.祝一切顺利.哦,如果你将两个命令插入一个批处理作业,那么你必须调整两个命令替换级别的语法(我认为是正确的术语).

批处理示例:

 REM --- copy the "fark*" files to the archive disk h:
 @echo off
 REM --- create/update the structure 
 xcopy fark* h: /s /e /f /t
 REM --- copy over the fark* dirs, and all associated subdirs
 for /d %%a in (fark*) do xcopy "%%a" "h:%%a\" /s /e /f /h /k /y
Run Code Online (Sandbox Code Playgroud)
  • Rus Future 2012年4月18日


PA.*_*PA. 6

如果要复制所有匹配目录的所有文件。您可能仍然会做类似的事情...

for /d %%d in (bo*) do (
  for /d %%e in (ma*) do (
     copy %%d\%%e\* c:\temp
Run Code Online (Sandbox Code Playgroud)

但是当在不同目录中使用相同名称的文件时,请谨慎使用。