使用批处理文件计数并将第n个文件复制到新目录,多次传递

时间:2017-05-10 21:04:44

标签: batch-file cmd command

我正在使用IPCAM进行时间推移视频。我从黄昏到黎明每15/20秒拍照。每个文件夹每天都标有日期等等。

我使用大量文件(目前为3750)使用每天的所有文件制作一个间隔拍摄视频。

我还想使用一定数量的图像制作3个单独的定时视频。

方程式

(总文件数)/(25 fps)/(3秒长)=要跳过的文件数

例如

3750/25/3 =要跳过的50个文件

所以我现在正在使用此代码

mkdir "3"

@echo off
set Counter=0
for %%f in (*.jpg) do call :p "%%f"
goto :p

:p
    set /a Counter+=1
    set /a X=Counter %% "50"
    if %X%==0 copy %1 "3"

goto :eof

这会创建目录" 3"并将每个第50个文件复制到该文件夹​​。然后我可以使用文件夹中的文件制作间隔拍摄视频。

然后,我必须编辑批处理文件10秒钟,然后编辑30张图像,然后分别运行。

如何将所有行添加到一个批处理文件中,这样我每次只需要编辑一个文件?

mkdir "10"

@echo off
set Counter=0
for %%f in (*.jpg) do call :p "%%f"
goto :p

:p
    set /a Counter+=1
    set /a X=Counter %% "15"
    if %X%==0 copy %1 "10"

goto :eof

&安培;

mkdir "30"

@echo off
set Counter=0
for %%f in (*.jpg) do call :p "%%f"
goto :p

:p
    set /a Counter+=1
    set /a X=Counter %% "125"
    if %X%==0 copy %1 "30"

goto :eof

希望这有点道理。

2 个答案:

答案 0 :(得分:0)

我还会使用批处理来计算文件并进行计算。

@echo off
:: get total number of files
for /f %%A in ('dir /b *.jpg ^| find /v /c ""') do set /A total=%%A

:: create subfolders and calculate skip
for %%A in (3 10 30) Do (
  mkdir "%%A"
  if %%A neq 30 (
    Set /A "skip%%A=total/25/%%A
  ) Else (
    Set /A "skip%%A=total/%%A
  )
)

set Counter=0
for %%f in (*.jpg) do call :p "%%f"
goto :EOF

:p
set /a "Counter+=1,X=Counter%%skip3,Y=Counter%%skip10,Z=Counter%%skip30"
if %X%==0 copy %1 "3"
if %Y%==0 copy %1 "10"
if %Z%==0 copy %1 "30"
goto :eof

已修改更改了文件夹30以包含30个jpg。

答案 1 :(得分:0)

您可以尝试这样的操作,您必须输入要创建的每个目录的秒数以及要跳过的文件数。 (假设批处理文件与JPG文件位于同一目录中,并且当前目录也设置为此目录。)

@echo off

:MainLoop {
  cls

  setlocal enabledelayedexpansion
  set fileCount=0
  set /p "duration=Seconds: "
  set /p "interval=Files to skip: "

  mkdir "%duration%"

  for %%f in (*.jpg) do (
    set /a fileCount+=1
    set /a frame=fileCount%%interval
    if !frame! == 0 (
      copy "%%f" "%duration%"
    )
  )
  pause
  endlocal
  goto :MainLoop
}

要跳过的文件数可以通过获取位于当前目录中的JPG文件的数量,除以每秒帧数(可以在脚本中定义为常量变量)和秒数来计算用户已输入。我不确定这是否是你想要的,因为你上一个例子中的“125”似乎已经关闭了。

dbenham的以下答案显示了如何获取目录中的数字文件:https://stackoverflow.com/a/11005300/7107236