Reputation: 3746
I have many video files, shot at the same time on 2 different cameras and copied into folders 1 and 2.
I'm looking to iterate through files in folder 1, select the newest file, and iterate through folder 2 and find the file with the same timestamp, and copy both those files into a new folder, i.e. copy files from directory camera 1, camera 2 to new directories named pair 1, pair 2, pair 3, pair 4 etc etc
Is there a simple way of writing a batch script that will do the above for me in a Windows command?
Something like this:
SET COUNT 0
for %%i in ("1/*.mp4") do (
SET FILE1=%%i
SET DATE1=%%~ti
for %%a in ("2/*.mp4") do (
SET FILE2=%%a
SET DATE2=%%~ta
IF "%DATE1%"=="%DATE2%" (
COUNT ++
make dir "scene_"%COUNT%
MOVE 1/%FILE1% "scene_"%COUNT%
MOVE 2/%FILE2% "scene_"%COUNT%
)
)
)
But my Windows scripting isn't up to much so I doubt this will work.
EDIT thanks
If I leave echo in, I get
MOVE ".\2\YDXJ0078.mp4" "scene_8\" MOVE ".\1\YDXJ0361.mp4" "scene_9\" MOVE ".\2\YDXJ0079.mp4" "scene_9\" MOVE ".\1\YDXJ0361.mp4" "scene_10\" MOVE ".\2\YDXJ0080.mp4" "scene_10\" MOVE ".\1\YDXJ0362.mp4" "scene_11\" MOVE ".\2\YDXJ0080.mp4" "scene_11\" MOVE ".\1\YDXJ0362.mp4" "scene_12\" MOVE ".\2\YDXJ0081.mp4" "scene_12\" MOVE ".\1\YDXJ0362.mp4" "scene_13\" MOVE ".\2\YDXJ0082.mp4" "scene_13\" MOVE ".\1\YDXJ0362.mp4" "scene_14\" MOVE ".\2\YDXJ0083.mp4" "scene_14\" MOVE ".\1\YDXJ0363.mp4" "scene_15\" MOVE ".\2\YDXJ0080.mp4" "scene_15\" MOVE ".\1\YDXJ0363.mp4" "scene_16\" MOVE ".\2\YDXJ0081.mp4" "scene_16\" MOVE ".\1\YDXJ0363.mp4" "scene_17\" MOVE ".\2\YDXJ0082.mp4" "scene_17\" MOVE ".\1\YDXJ0363.mp4" "scene_18\" MOVE ".\2\YDXJ0083.mp4" "scene_18\" MOVE ".\1\YDXJ0364.mp4" "scene_19\" MOVE ".\2\YDXJ0081.mp4" "scene_19\" MOVE ".\1\YDXJ0364.mp4" "scene_20\" MOVE ".\2\YDXJ0082.mp4" "scene_20\" MOVE ".\1\YDXJ0364.mp4" "scene_21\" MOVE ".\2\YDXJ0083.mp4" "scene_21\" MOVE ".\1\YDXJ0365.mp4" "scene_22\" MOVE ".\2\YDXJ0083.mp4" "scene_22\" MOVE ".\1\YDXJ0365.mp4" "scene_23\" MOVE ".\2\YDXJ0084.mp4" "scene_23\" MOVE ".\1\YDXJ0365.mp4" "scene_24\" MOVE ".\2\YDXJ0085.mp4" "scene_24\" MOVE ".\1\YDXJ0366.mp4" "scene_25\" MOVE ".\2\YDXJ0084.mp4" "scene_25\" MOVE ".\1\YDXJ0366.mp4" "scene_26\" MOVE ".\2\YDXJ0085.mp4" "scene_26\" MOVE ".\1\YDXJ0367.mp4" "scene_27\" MOVE ".\2\YDXJ0084.mp4" "scene_27\" MOVE ".\1\YDXJ0367.mp4" "scene_28\" MOVE ".\2\YDXJ0085.mp4" "scene_28\" MOVE ".\1\YDXJ0370.mp4" "scene_29\" MOVE ".\2\YDXJ0086.mp4" "scene_29\" MOVE ".\1\YDXJ0370.mp4" "scene_30\" MOVE ".\2\YDXJ0087.mp4" "scene_30\" MOVE ".\1\YDXJ0370.mp4" "scene_31\" MOVE ".\2\YDXJ0088.mp4" "scene_31\" MOVE ".\1\YDXJ0370.mp4" "scene_32\" MOVE ".\2\YDXJ0089.mp4" "scene_32\" MOVE ".\1\YDXJ0370.mp4" "scene_33\" MOVE ".\2\YDXJ0090.mp4" "scene_33\" MOVE ".\1\YDXJ0371.mp4" "scene_34\" MOVE ".\2\YDXJ0086.mp4" "scene_34\" MOVE ".\1\YDXJ0371.mp4" "scene_35\" MOVE ".\2\YDXJ0087.mp4" "scene_35\" MOVE ".\1\YDXJ0371.mp4" "scene_36\" MOVE ".\2\YDXJ0088.mp4" "scene_36\" MOVE ".\1\YDXJ0371.mp4" "scene_37\" MOVE ".\2\YDXJ0089.mp4" "scene_37\" MOVE ".\1\YDXJ0371.mp4" "scene_38\" MOVE ".\2\YDXJ0090.mp4" "scene_38\" MOVE ".\1\YDXJ0372.mp4" "scene_39\" MOVE ".\2\YDXJ0086.mp4" "scene_39\" MOVE ".\1\YDXJ0372.mp4" "scene_40\" MOVE ".\2\YDXJ0087.mp4" "scene_40\" MOVE ".\1\YDXJ0372.mp4" "scene_41\" MOVE ".\2\YDXJ0088.mp4" "scene_41\" MOVE ".\1\YDXJ0372.mp4" "scene_42\" MOVE ".\2\YDXJ0089.mp4" "scene_42\" MOVE ".\1\YDXJ0372.mp4" "scene_43\" MOVE ".\2\YDXJ0090.mp4" "scene_43\" MOVE ".\1\YDXJ0373.mp4" "scene_44\" MOVE ".\2\YDXJ0086.mp4" "scene_44\" MOVE ".\1\YDXJ0373.mp4" "scene_45\" MOVE ".\2\YDXJ0087.mp4" "scene_45\" MOVE ".\1\YDXJ0373.mp4" "scene_46\" MOVE ".\2\YDXJ0088.mp4" "scene_46\" MOVE ".\1\YDXJ0373.mp4" "scene_47\" MOVE ".\2\YDXJ0089.mp4" "scene_47\" MOVE ".\1\YDXJ0373.mp4" "scene_48\" MOVE ".\2\YDXJ0090.mp4" "scene_48\" MOVE ".\1\YDXJ0374.mp4" "scene_49\" MOVE ".\2\YDXJ0088.mp4" "scene_49\" MOVE ".\1\YDXJ0374.mp4" "scene_50\" MOVE ".\2\YDXJ0089.mp4" "scene_50\" MOVE ".\1\YDXJ0374.mp4" "scene_51\" MOVE ".\2\YDXJ0090.mp4" "scene_51\" MOVE ".\1\YDXJ0375.mp4" "scene_52\" MOVE ".\2\YDXJ0091.mp4" "scene_52\" MOVE ".\1\YDXJ0375.mp4" "scene_53\" MOVE ".\2\YDXJ0092.mp4" "scene_53\" MOVE ".\1\YDXJ0376.mp4" "scene_54\" MOVE ".\2\YDXJ0091.mp4" "scene_54\" MOVE ".\1\YDXJ0376.mp4" "scene_55\" MOVE ".\2\YDXJ0092.mp4" "scene_55\" MOVE ".\1\YDXJ0377.mp4" "scene_56\" MOVE ".\2\YDXJ0093.mp4" "scene_56\" MOVE ".\1\YDXJ0377.mp4" "scene_57\" MOVE ".\2\YDXJ0094.mp4" "scene_57\" MOVE ".\1\YDXJ0377.mp4" "scene_58\" MOVE ".\2\YDXJ0095.mp4" "scene_58\" MOVE ".\1\YDXJ0377.mp4" "scene_59\" MOVE ".\2\YDXJ0096.mp4" "scene_59\" MOVE ".\1\YDXJ0378.mp4" "scene_60\" MOVE ".\2\YDXJ0093.mp4" "scene_60\" MOVE ".\1\YDXJ0378.mp4" "scene_61\" MOVE ".\2\YDXJ0094.mp4" "scene_61\" MOVE ".\1\YDXJ0378.mp4" "scene_62\" MOVE ".\2\YDXJ0095.mp4" "scene_62\" MOVE ".\1\YDXJ0378.mp4" "scene_63\" MOVE ".\2\YDXJ0096.mp4" "scene_63\" MOVE ".\1\YDXJ0379.mp4" "scene_64\" MOVE ".\2\YDXJ0094.mp4" "scene_64\" MOVE ".\1\YDXJ0379.mp4" "scene_65\" MOVE ".\2\YDXJ0095.mp4" "scene_65\" MOVE ".\1\YDXJ0379.mp4" "scene_66\" MOVE ".\2\YDXJ0096.mp4" "scene_66\" MOVE ".\1\YDXJ0380.mp4" "scene_67\" MOVE ".\2\YDXJ0095.mp4" "scene_67\" MOVE ".\1\YDXJ0380.mp4" "scene_68\" MOVE ".\2\YDXJ0096.mp4" "scene_68\" MOVE ".\1\YDXJ0381.mp4" "scene_69\" MOVE ".\2\YDXJ0098.mp4" "scene_69\" MOVE ".\1\YDXJ0381.mp4" "scene_70\" MOVE ".\2\YDXJ0099.mp4" "scene_70\" MOVE ".\1\YDXJ0381.mp4" "scene_71\" MOVE ".\2\YDXJ0100.mp4" "scene_71\" MOVE ".\1\YDXJ0381.mp4" "scene_72\" MOVE ".\2\YDXJ0101.mp4" "scene_72\" MOVE ".\1\YDXJ0381.mp4" "scene_73\" MOVE ".\2\YDXJ0102.mp4" "scene_73\" MOVE ".\1\YDXJ0382.mp4" "scene_74\" MOVE ".\2\YDXJ0098.mp4" "scene_74\" MOVE ".\1\YDXJ0382.mp4" "scene_75\" MOVE ".\2\YDXJ0099.mp4" "scene_75\" MOVE ".\1\YDXJ0382.mp4" "scene_76\" MOVE ".\2\YDXJ0100.mp4" "scene_76\" MOVE ".\1\YDXJ0382.mp4" "scene_77\" MOVE ".\2\YDXJ0101.mp4" "scene_77\" MOVE ".\1\YDXJ0382.mp4" "scene_78\" MOVE ".\2\YDXJ0102.mp4" "scene_78\" MOVE ".\1\YDXJ0383.mp4" "scene_79\" MOVE ".\2\YDXJ0098.mp4" "scene_79\" MOVE ".\1\YDXJ0383.mp4" "scene_80\" MOVE ".\2\YDXJ0099.mp4" "scene_80\" MOVE ".\1\YDXJ0383.mp4" "scene_81\" MOVE ".\2\YDXJ0100.mp4" "scene_81\" MOVE ".\1\YDXJ0383.mp4" "scene_82\" MOVE ".\2\YDXJ0101.mp4" "scene_82\" MOVE ".\1\YDXJ0383.mp4" "scene_83\" MOVE ".\2\YDXJ0102.mp4" "scene_83\" MOVE ".\1\YDXJ0384.mp4" "scene_84\" MOVE ".\2\YDXJ0099.mp4" "scene_84\" MOVE ".\1\YDXJ0384.mp4" "scene_85\" MOVE ".\2\YDXJ0100.mp4" "scene_85\" MOVE ".\1\YDXJ0384.mp4" "scene_86\" MOVE ".\2\YDXJ0101.mp4" "scene_86\" MOVE ".\1\YDXJ0384.mp4" "scene_87\" MOVE ".\2\YDXJ0102.mp4" "scene_87\" MOVE ".\1\YDXJ0384.mp4" "scene_88\" MOVE ".\2\YDXJ0103.mp4" "scene_88\" MOVE ".\1\YDXJ0384.mp4" "scene_89\" MOVE ".\2\YDXJ0104.mp4" "scene_89\" MOVE ".\1\YDXJ0385.mp4" "scene_90\" MOVE ".\2\YDXJ0102.mp4" "scene_90\" MOVE ".\1\YDXJ0385.mp4" "scene_91\" MOVE ".\2\YDXJ0103.mp4" "scene_91\" MOVE ".\1\YDXJ0385.mp4" "scene_92\" MOVE ".\2\YDXJ0104.mp4" "scene_92\" MOVE ".\1\YDXJ0386.mp4" "scene_93\" MOVE ".\2\YDXJ0102.mp4" "scene_93\" MOVE ".\1\YDXJ0386.mp4" "scene_94\" MOVE ".\2\YDXJ0103.mp4" "scene_94\" MOVE ".\1\YDXJ0386.mp4" "scene_95\" MOVE ".\2\YDXJ0104.mp4" "scene_95\" MOVE ".\1\YDXJ0387.mp4" "scene_96\" MOVE ".\2\YDXJ0102.mp4" "scene_96\" MOVE ".\1\YDXJ0387.mp4" "scene_97\" MOVE ".\2\YDXJ0103.mp4" "scene_97\" MOVE ".\1\YDXJ0387.mp4" "scene_98\" MOVE ".\2\YDXJ0104.mp4" "scene_98\" MOVE ".\1\YDXJ0388.mp4" "scene_99\" MOVE ".\2\YDXJ0106.mp4" "scene_99\" MOVE ".\1\YDXJ0388.mp4" "scene_100\" MOVE ".\2\YDXJ0107.mp4" "scene_100\" MOVE ".\1\YDXJ0388.mp4" "scene_101\" MOVE ".\2\YDXJ0108.mp4" "scene_101\" MOVE ".\1\YDXJ0388.mp4" "scene_102\" MOVE ".\2\YDXJ0109.mp4" "scene_102\" MOVE ".\1\YDXJ0389.mp4" "scene_103\" MOVE ".\2\YDXJ0106.mp4" "scene_103\" MOVE ".\1\YDXJ0389.mp4" "scene_104\" MOVE ".\2\YDXJ0107.mp4" "scene_104\" MOVE ".\1\YDXJ0389.mp4" "scene_105\" MOVE ".\2\YDXJ0108.mp4" "scene_105\" MOVE ".\1\YDXJ0389.mp4" "scene_106\" MOVE ".\2\YDXJ0109.mp4" "scene_106\" MOVE ".\1\YDXJ0389.mp4" "scene_107\" MOVE ".\2\YDXJ0110.mp4" "scene_107\" MOVE ".\1\YDXJ0390.mp4" "scene_108\" MOVE ".\2\YDXJ0107.mp4" "scene_108\" MOVE ".\1\YDXJ0390.mp4" "scene_109\" MOVE ".\2\YDXJ0108.mp4" "scene_109\" MOVE ".\1\YDXJ0390.mp4" "scene_110\" MOVE ".\2\YDXJ0109.mp4" "scene_110\" MOVE ".\1\YDXJ0390.mp4" "scene_111\" MOVE ".\2\YDXJ0110.mp4" "scene_111\" MOVE ".\1\YDXJ0391.mp4" "scene_112\" MOVE ".\2\YDXJ0109.mp4" "scene_112\" MOVE ".\1\YDXJ0391.mp4" "scene_113\" MOVE ".\2\YDXJ0110.mp4" "scene_113\" MOVE ".\1\YDXJ0391.mp4" "scene_114\" MOVE ".\2\YDXJ0111.mp4" "scene_114\" MOVE ".\1\YDXJ0392.mp4" "scene_115\" MOVE ".\2\YDXJ0109.mp4" "scene_115\" MOVE ".\1\YDXJ0392.mp4" "scene_116\" MOVE ".\2\YDXJ0110.mp4" "scene_116\" MOVE ".\1\YDXJ0392.mp4" "scene_117\" MOVE ".\2\YDXJ0111.mp4" "scene_117\" MOVE ".\1\YDXJ0392.mp4" "scene_118\" MOVE ".\2\YDXJ0112.mp4" "scene_118\" MOVE ".\1\YDXJ0392.mp4" "scene_119\" MOVE ".\2\YDXJ0113.mp4" "scene_119\" MOVE ".\1\YDXJ0393.mp4" "scene_120\" MOVE ".\2\YDXJ0111.mp4" "scene_120\" MOVE ".\1\YDXJ0393.mp4" "scene_121\" MOVE ".\2\YDXJ0112.mp4" "scene_121\" MOVE ".\1\YDXJ0393.mp4" "scene_122\" MOVE ".\2\YDXJ0113.mp4" "scene_122\" MOVE ".\1\YDXJ0393.mp4" "scene_123\" MOVE ".\2\YDXJ0114.mp4" "scene_123\" MOVE ".\1\YDXJ0393.mp4" "scene_124\" MOVE ".\2\YDXJ0115.mp4" "scene_124\" MOVE ".\1\YDXJ0394.mp4" "scene_125\" MOVE ".\2\YDXJ0111.mp4" "scene_125\" MOVE ".\1\YDXJ0394.mp4" "scene_126\" MOVE ".\2\YDXJ0112.mp4" "scene_126\" MOVE ".\1\YDXJ0394.mp4" "scene_127\" MOVE ".\2\YDXJ0113.mp4" "scene_127\" MOVE ".\1\YDXJ0394.mp4" "scene_128\" MOVE ".\2\YDXJ0114.mp4" "scene_128\" MOVE ".\1\YDXJ0394.mp4" "scene_129\" MOVE ".\2\YDXJ0115.mp4" "scene_129\" MOVE ".\1\YDXJ0395.mp4" "scene_130\" MOVE ".\2\YDXJ0111.mp4" "scene_130\" MOVE ".\1\YDXJ0395.mp4" "scene_131\" MOVE ".\2\YDXJ0112.mp4" "scene_131\" MOVE ".\1\YDXJ0395.mp4" "scene_132\" MOVE ".\2\YDXJ0113.mp4" "scene_132\" MOVE ".\1\YDXJ0395.mp4" "scene_133\" MOVE ".\2\YDXJ0114.mp4" "scene_133\" MOVE ".\1\YDXJ0395.mp4" "scene_134\" MOVE ".\2\YDXJ0115.mp4" "scene_134\" MOVE ".\1\YDXJ0396.mp4" "scene_135\" MOVE ".\2\YDXJ0112.mp4" "scene_135\" MOVE ".\1\YDXJ0396.mp4" "scene_136\" MOVE ".\2\YDXJ0113.mp4" "scene_136\" MOVE ".\1\YDXJ0396.mp4" "scene_137\" MOVE ".\2\YDXJ0114.mp4" "scene_137\" MOVE ".\1\YDXJ0396.mp4" "scene_138\" MOVE ".\2\YDXJ0115.mp4" "scene_138\" MOVE ".\1\YDXJ0397.mp4" "scene_139\" MOVE ".\2\YDXJ0003.mp4" "scene_139\" MOVE ".\1\YDXJ0397.mp4" "scene_140\" MOVE ".\2\YDXJ0004.mp4" "scene_140\" MOVE ".\1\YDXJ0397.mp4" "scene_141\" MOVE ".\2\YDXJ0005.mp4" "scene_141\" MOVE ".\1\YDXJ0397.mp4" "scene_142\" MOVE ".\2\YDXJ0006.mp4" "scene_142\" MOVE ".\1\YDXJ0398.mp4" "scene_143\" MOVE ".\2\YDXJ0003.mp4" "scene_143\" MOVE ".\1\YDXJ0398.mp4" "scene_144\" MOVE ".\2\YDXJ0004.mp4" "scene_144\" MOVE ".\1\YDXJ0398.mp4" "scene_145\" MOVE ".\2\YDXJ0005.mp4" "scene_145\" MOVE ".\1\YDXJ0398.mp4" "scene_146\" MOVE ".\2\YDXJ0006.mp4" "scene_146\" MOVE ".\1\YDXJ0399.mp4" "scene_147\" MOVE ".\2\YDXJ0003.mp4" "scene_147\" MOVE ".\1\YDXJ0399.mp4" "scene_148\" MOVE ".\2\YDXJ0004.mp4" "scene_148\" MOVE ".\1\YDXJ0399.mp4" "scene_149\" MOVE ".\2\YDXJ0005.mp4" "scene_149\" MOVE ".\1\YDXJ0399.mp4" "scene_150\" MOVE ".\2\YDXJ0006.mp4" "scene_150\" MOVE ".\1\YDXJ0400.mp4" "scene_151\" MOVE ".\2\YDXJ0003.mp4" "scene_151\" MOVE ".\1\YDXJ0400.mp4" "scene_152\" MOVE ".\2\YDXJ0004.mp4" "scene_152\" MOVE ".\1\YDXJ0400.mp4" "scene_153\" MOVE ".\2\YDXJ0005.mp4" "scene_153\" MOVE ".\1\YDXJ0400.mp4" "scene_154\" MOVE ".\2\YDXJ0006.mp4" "scene_154\" MOVE ".\1\YDXJ0401.mp4" "scene_155\" MOVE ".\2\YDXJ0005.mp4" "scene_155\" MOVE ".\1\YDXJ0401.mp4" "scene_156\" MOVE ".\2\YDXJ0006.mp4" "scene_156\" MOVE ".\1\YDXJ0410.mp4" "scene_157\" MOVE ".\2\YDXJ0015.mp4" "scene_157\"
And all of the folders created. Which is right. If I remove ECHO(
I get the first files moved and the error "The system cannot find the drive specified." on the next line. After this I set the source directory (I'm running at a bat)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=C:\Users\example\"
SET /a COUNT=0
if NOT ["%errorlevel%"]==["0"] pause
PUSHD "%sourcedir%"
for %%i in (".\1\*.mp4") do (
for %%a in (".\2\*.mp4") do (
CALL :cmpdt "%%~ti" "%%~ta"
IF DEFINED samedt (
IF /i "%%~nxi"=="%%~nxa" (ECHO filename match "%%a" - no action taken
) ELSE (
SET /a COUNT+=1
md "scene_!COUNT!"
MOVE "%%i" "scene_!COUNT!\"
MOVE "%%a" "scene_!COUNT!\"
)
)
)
)
POPD
GOTO :EOF
:: compare date and time %1 to %2. Set samedt=Y if within n secs (assume date same)
:cmpdt
IF "%~1"=="%~2" SET "samedt=Y"&GOTO :EOF
SET "samedt="
:: some temp variables ($1,$2)
SET "$1=%~1"
SET "$2=%~2"
:: compare dates - first 10 characters - if neq, not a match
IF "%$1:~0,10%" neq "%$2:~0,10%" GOTO :EOF
:: convert from "dd/mm/yyyy hh:mm ?m" to "hhmm?" - 12:xx to 00:xx
IF "%$1:~11,2%"=="12" (SET "$1=00%$1:~14,2%%$1:~17,1%") ELSE (SET "$1=%$1:~11,2%%$1:~14,2%%$1:~17,1%")
IF "%$2:~11,2%"=="12" (SET "$2=00%$2:~14,2%%$2:~17,1%") ELSE (SET "$2=%$2:~11,2%%$2:~14,2%%$2:~17,1%")
:: Now covert hh to minutes and compensate for am/pm.
:: add 100 to hh,mm by prefixing `1` then subtracting 100 to overcome octal maths
IF /i "%$1:~-1%"=="A" (SET /a $1=(1%$1:~0,2% - 100^)*60+1%$1:~2,2%-100
) ELSE (
SET /a $1=(1%$1:~0,2% - 100 + 12^)*60+1%$1:~2,2%-100
)
IF /i "%$2:~-1%"=="A" (SET /a $2=(1%$2:~0,2% - 100^)*60+1%$2:~2,2%-100
) ELSE (
SET /a $2=(1%$2:~0,2% - 100 + 12^)*60+1%$2:~2,2%-100
)
:: Now have minutes-since-midnight in $1,$2. Date is the same, $1 neq $2
:: allow difference of 3 minutes
SET /a diff=3
SET /a $1=$1+diff
SET /a diff=2*diff
:cmpl
IF %$1%==%$2% SET "samedt=Y"
IF %diff%==0 GOTO :EOF
SET /a diff-=1
SET /a $1-=1
GOTO cmpl
Upvotes: 0
Views: 77
Reputation: 80211
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET /a COUNT=0
PUSHD "%sourcedir%"
for %%i in (".\1\*.mp4") do (
for %%a in (".\2\*.mp4") do (
IF "%%~ti"=="%%~ta" (
IF /i "%%~nxi"=="%%~nxa" (ECHO filename match "%%a" - no action taken
) ELSE (
SET /a COUNT+=1
md "scene_!COUNT!"
ECHO(MOVE "%%i" "scene_!COUNT!\"
ECHO(MOVE "%%a" "scene_!COUNT!\"
)
)
)
)
POPD
GOTO :EOF
You would need to change the setting of sourcedir
to suit your circumstances.
The required MOVE commands are merely ECHO
ed for testing purposes. After you've verified that the commands are correct, change ECHO(MOVE
to MOVE
to actually move the files. Append >nul
to suppress report messages (eg. 1 file moved
)
Note that in the Windows world, \
is a directory-separator and /
is a switch-indicator. Windows often, but not always, makes the translation. Best to use the correct form.
Using delayedexpansion
, the run-time value of a variable is accessed by !var!
. %var%
is always the parse-time value
OTT, I've added an extra test - if the filenames match, no move
is attempted and a report line generated.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET /a COUNT=0
PUSHD "%sourcedir%"
for %%i in (".\1\*.mp4") do (
for %%a in (".\2\*.mp4") do (
CALL :cmpdt "%%~ti" "%%~ta"
IF DEFINED samedt (
IF /i "%%~nxi"=="%%~nxa" (ECHO filename match "%%a" - no action taken
) ELSE (
SET /a COUNT+=1
md "scene_!COUNT!"
ECHO(MOVE "%%i" "scene_!COUNT!\"
ECHO(MOVE "%%a" "scene_!COUNT!\"
)
)
)
)
POPD
GOTO :EOF
:: compare date and time %1 to %2. Set samedt=Y if within n secs (assume date same)
:cmpdt
IF "%~1"=="%~2" SET "samedt=Y"&GOTO :EOF
SET "samedt="
:: some temp variables ($1,$2)
SET "$1=%~1"
SET "$2=%~2"
:: compare dates - first 10 characters - if neq, not a match
IF "%$1:~0,10%" neq "%$2:~0,10%" GOTO :EOF
:: convert from "dd/mm/yyyy hh:mm ?m" to "hhmm?" - 12:xx to 00:xx
IF "%$1:~11,2%"=="12" (SET "$1=00%$1:~14,2%%$1:~17,1%") ELSE (SET "$1=%$1:~11,2%%$1:~14,2%%$1:~17,1%")
IF "%$2:~11,2%"=="12" (SET "$2=00%$2:~14,2%%$2:~17,1%") ELSE (SET "$2=%$2:~11,2%%$2:~14,2%%$2:~17,1%")
:: Now covert hh to minutes and compensate for am/pm.
:: add 100 to hh,mm by prefixing `1` then subtracting 100 to overcome octal maths
IF /i "%$1:~-1%"=="A" (SET /a $1=(1%$1:~0,2% - 100^)*60+1%$1:~2,2%-100
) ELSE (
SET /a $1=(1%$1:~0,2% - 100 + 12^)*60+1%$1:~2,2%-100
)
IF /i "%$2:~-1%"=="A" (SET /a $2=(1%$2:~0,2% - 100^)*60+1%$2:~2,2%-100
) ELSE (
SET /a $2=(1%$2:~0,2% - 100 + 12^)*60+1%$2:~2,2%-100
)
:: Now have minutes-since-midnight in $1,$2. Date is the same, $1 neq $2
:: allow difference of 3 minutes
SET /a diff=3
SET /a $1=$1+diff
SET /a diff=2*diff
:cmpl
IF %$1%==%$2% SET "samedt=Y"
IF %diff%==0 GOTO :EOF
SET /a diff-=1
SET /a $1-=1
GOTO cmpl
Revision to suit the "time difference" idea.
The subroutine :cmpdt
compares that date and time of the two files in date hh:mm ?M
format where date
is 10 characters long.
If the date is not the same, then samedt
is left "set" to nothing (ie not defined - the if defined
test applies to the run-time value)
If the dte parts are the same, then the time part is manipulated to hhmm?
where 12:xx AM
becomes 00xxA
, 01:xx AM
01xxA
and so on.
This string is then manipulted again, calculating 60*hours+minutes for AM or 60*(hours+12)+minutes for PM. Batch treats leading 0
as octal, so 1
is strung before the 2-digit hour/minute and then 100 subtracted.
Result is minutes-since midnight. If required difference (diff) is 3 then add this to one and test against the other decrementing the result (diff*2+1) times. If any match, then set the 'samedt' flag.
Example :- 03:10 PM
becomes 0310P
and then 910 (((3+12)*60)+10) if the other time is say 907 (3 minutes earlier) and diff
is 3
then add to 910 ==> 913, compare to 907 and decrement. repeat 7 times (913, 912...908,907)
Please note that this code applies a DIFF of 3 minutes - to show that it's general and you can set it to any value you prefer
although - since the times delivered are in minutes, not seconds, the incidence of having two different times at all should be very low.
(complicated - could be done in other ways, but it will work. Batch can do a lot of things if you're sufficiently determined...)
Upvotes: 2