任何人都知道命令行实用程序(或可以作为命令行运行的实用程序)将目录树中的所有.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文件,因为我不想打扰系统处理器,而且大多数文件都不会从一天变化到了一天。这更像是文件同步。
答案 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环境中,我会使用find
或rsync
(也许是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,它具有可以从目标目录中删除文件的选项(如果它们也已从源目录中删除)以及许多其他此类变体。