以编程方式收集类似文件名的文件

时间:2016-01-29 11:37:09

标签: windows batch-file

我有一个可以将所有照片转储到同一网络上的辅助电脑上的照相机。

在帮助PC上,我计划每隔x分钟运行一次计划任务,使用ImageMagick对图像进行一些编辑(例如蒙太奇,标签等)。

这些文件是通过时间戳命名的,一次只需要4个,所以如果有几个人背靠背使用了光学平台,那么它会将以下文件传输给帮助者PC:

  • 2016-01-29-22-05-01.jpg
  • 2016-01-29-22-05-02.jpg
  • 2016-01-29-22-05-03.jpg
  • 2016-01-29-22-05-04.jpg
  • 2016-01-29- 22-07 -01.jpg(注意时间戳更改)
  • 2016-01-29-22-07-02.jpg
  • 2016-01-29-22-07-03.jpg
  • 2016-01-29-22-07-04.jpg

我最初使用批处理文件将* .jpg提供给ImageMagick,但现在我意识到如果两个人在<中使用了photobooth。 x分钟,然后将有两组图像(如上所述)。将8张图片而不是4张图片移交给ImageMagick会导致混乱。

我的问题是 - 如何识别名称相似的文件(例如,前16个字符是相同的)并将这些文件传递给ImageMagick?

2 个答案:

答案 0 :(得分:0)

我没有时间对此进行编码,但您可以执行以下操作

  1. 获取第二个
  2. 的当前日期和时间
  3. 将其格式化为文件名(set mydatetime=2016-01-29-22-07
  4. for /r %i in (%mydatetime%*) do move %i %targetpath%
  5. 等待1分钟PING 127.0.0.1 -n 1 -w 60000 >NUL
  6. (假设您在上面的评论中仅表示每分钟一批)

    但是,如果你有能力修改输出(通过添加“几秒钟的睡眠”表示),我想和其他人一样,为什么你不只是让输出更强大?单独的文件夹,批次名称等

答案 1 :(得分:0)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\transferred.log"
IF NOT EXIST "%filename1%" ECHO xxx>>"%filename1%"
:again
SET "transfer="
FOR /f "tokens=1-6delims=-" %%a IN (
  'dir /b /a-d /on "%sourcedir%\*.jpg"^|findstr /b /v /g:"%filename1%"'
 ) DO (
 SET "transfer=%%a-%%b-%%c-%%d-%%e"
 GOTO movefiles
)
ECHO no new files to MOVE
GOTO :EOF

:movefiles
>>"%filename1%" ECHO %transfer%
:: don't know what you want from here
ECHO transfer %transfer%* ??
SET "transfer=%transfer%-01.jpg %transfer%-02.jpg %transfer%-03.jpg %transfer%-04.jpg"
ECHO transfer %transfer% ??
:: perhaps a delay here for helper PC to process??
timeout /t 5 >nul
GOTO again

您需要更改sourcedirfilename1的设置以适合您的具体情况。

您还没有告诉我们您想要分组的文件会发生什么,所以我认为它们仍然存在。

问题的关键是for - 使用-作为分隔符获取前6个令牌并以基本形式应用于目录列表,而不按名称顺序对目录进行排序并对其进行过滤以filename1

中未出现的字符串开头

如果找到任何此类行,请将名称收集到transfer中,并使用该值(未指定)执行某些操作,在日志中记录该值,以便下一个循环包含其排除中找到的值 - 列表。