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

时间:2011-12-22 19:52:35

标签: 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”。

5 个答案:

答案 0 :(得分:23)

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

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

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

<强>附录

如果您愿意假设只有一个文件夹符合该模式,那么您已经知道了完成目标的所有步骤。

@echo off
cd bo*\ma*
xcopy * c:\somedirectory

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

@echo off
pushd bo*\ma*
xcopy * c:\somedirectory
popd
但是,你应该非常小心。波士顿\马拉松可能存在,PUSHD和CD都不会表明存在潜在问题。

答案 1 :(得分:5)

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.

要获取要复制的文件,请执行以下操作,  也来自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.

是的,这是老式的unix / dos东西,但它有效,而且 你可以将它放入一个批处理作业。你可以避免成为 mouseboy完成工作。 (点,点击,咕噜,诅咒。 重复。使用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
  • Rus Future 2012年4月18日

答案 2 :(得分:4)

如果您要复制所有匹配目录的所有文件。你可能还会做这样的事......

for /d %%d in (bo*) do (
  for /d %%e in (ma*) do (
     copy %%d\%%e\* c:\temp

但请注意具有相同名称的文件出现在不同目录中的情况。

答案 3 :(得分:1)

这是我的批处理脚本,用于将一些文件夹备份到一个驱动器,一些文件夹使用上述帮助备份到另一个驱动器 - 适用于Win 7。

如果使用FOR循环,则无需复制文件夹结构,而/ S只会复制更改的内容

遗憾的是,你不能在这里使用正则表达式 - 或者有人有更整洁的解决方案吗?

FOR /d %%a in (2010* 2011* 2012* 201301* 2013020* 2013021* 20130222* 20130224*) DO (
  XCOPY "%%a" "Z:\Backup\My Videos\%%a\" /D /S /Y | findstr /V "0 File"
)
FOR /d %%a in (20130225* 201303*) DO (
  XCOPY "%%a" "X:\Backup\My Videos\%%a\" /D /S /Y | findstr /V "0 File"
)

答案 4 :(得分:0)

因此,如果您知道目录名称,我不确定您为何尝试使用通配符。我有一个问题,我们使用Mozilla Firefox,我们使用的许多网站都需要通用访问卡身份验证。默认情况下,Mozilla Firefox未配置为使用CAC Reader。因此,我使用CAC Reader配置了Firefox,然后从我的用户目录C:\ Users \%myname%\ AppData \ Roaming \ Mozilla \ Firefox \ Profiles \ ??????中获取了cert8.db和secmod.db文件。 ?.DEFAULT

问题是当我不知道谁登录到哪台计算机时,将这些文件复制到多台计算机和多个用户目录,并且???????默认文件夹被命名为每个用户不同的名称。

我创建了一个名为Computers.txt的文本文件并输入我从Active Directory检索到的计算机列表,然后编写了以下脚本来复制具有我复制到C:\ Temp的CAC设备的.db文件\安全

ColumnDataSource
相关问题