将目录树复制到命令行中的单个目录

时间:2009-05-13 16:22:17

标签: windows regex command-line file-rename

任何人都知道命令行实用程序(或可以作为命令行运行的实用程序)将目录树中的所有.jpg文件收集到单个文件夹中,只复制更改的文件?

我从Renamer开始,这对于重命名当前目录中的文件很有用,但是当我试图破坏路径时,它就缩短了。这可能是因为我不太了解Renamer。我最终创建了一个文本文件目录转储,然后使用REGEX查找/替换来创建批处理文件,但这很难有效,也不是自动化的。

REGEX:

(G:\ DIR \ DIR \)([0-9] + \)([0-9] + \)([0-9] + \)([0-9] + \)(对[0-9] +。JPG)

改变了这个

G:\ DIR \ DIR \ 00 \ 00 \ 00 \ 00 \ p0000000000.jpg

到这个

G:\ DIR \ DIR \ p0000000000.jpg

批处理文件中的

(复制\ 1 \ 2 \ 3 \ 4 \ 5 \ 6 \ 1 \ 6)。

我需要在没有真人登录的情况下将整个事情作为计划任务运行。不是真的在寻找Zip文件,因为我不想打扰系统处理器,而且大多数文件都不会从一天变化到了一天。这更像是文件同步。

3 个答案:

答案 0 :(得分:7)

在Windows命令行中,您可以执行以下操作:

for /R A %i IN (*.jpg) DO xcopy %i B /M /Y

其中A是源目录,B是目标目录。您需要启用命令扩展,我认为这是默认设置。

答案 1 :(得分:0)

我猜你的路径格式是在Windows上。

我没有阅读整篇文章,但http://www.infionline.net/~wtnewton/batch/batguide.html#6a可能对您有帮助。

同一页面上有dizzy.bat,(http://www.infionline.net/~wtnewton/batch/dizzy.bat),编辑它可能很容易做到你想做的事。

答案 2 :(得分:0)

在Unix环境中,我会使用findrsync(也许是shell的一些功能)。 Cygwin和MinGW带有find,可能带有rsync。您也可以在某处为Windows获取find的独立端口。

如果SOURCE shell变量是包含要复制文件的子目录的目录,则DEST shell变量是将它们复制到的目录:

find $SOURCE -name \*.jpg -exec cp --update \{\} $DEST/ \;

find本质上是递归的。 “-name \*.jpg”选择与该模式匹配的文件。您可以使用-and添加其他条件。 --update命令(或-u)的cp选项仅在复制或尚未复制时才会复制文件。 cp还有其他可能有用的选项。

如果$ SOURCE与DIR / DIR /示例中的$ DEST相同,那么find也会找到目标文件(已经复制),虽然这样就可以了,cp会认识到你正在尝试复制相同的文件本身并跳过它,但如果你想避免浪费的工作,你可以使用'for'和'if'(或其他东西)只在DIR / DIR /的子目录上运行find.

您还可以使用rsync,它具有可以从目标目录中删除文件的选项(如果它们也已从源目录中删除)以及许多其他此类变体。