VideoHelp Forum




+ Reply to Thread
Results 1 to 21 of 21
  1. Member Budman1's Avatar
    Join Date
    Jul 2012
    Location
    NORTHWEST ILLINOIS, USA
    Search Comp PM
    This is definitely hard to decide where to post. I am trying to modify several sequential jpegs into png files with the Created date superimposed on them and then they will be made into a video so the time will be a permanent part and not subject to changes made by copying, moving, or 'touch', etc.

    Below is a script that works only if run once and then terminated with CTRL-C and then rerun again in the same Window. Please understand, batch files are not my forte and I have tried MANY variations but none gives results that I need. I have highlighted the areas that fails and the ones that work. If anyone can point me in the right direction or tell me how to fix this I would appreciate it greatly.

    tmpfile.txt --> File Creation Date/Time : 2014:12:18 01:22:00-06:00
    Funny little characters ---> <colon X>
    ---------------RUN 1 Script ------------------------------------------------------
    for %a in (*.jpeg) DO (
    call exiftool.exe -FileCreateDate %a 1>tmpfile.txt
    FOR /F "tokens=1,2,3,4,5,6,7-15* delims=-: " %a in (tmpfile.txt) DO (
    set string1=%e
    set string2=%f
    set string3=%g
    set string4=%h
    set string5=%i
    set string6=%j
    set final=%e\:%f\:%g %h\:%i\:%j
    setlocal enabledelayedextension
    )
    "ffmpeg.exe" -i "%a" -vf "format=yuv420p,drawtext=fontfile='Arial':fontsize =20:
    text='Created '=(w-(tw*1.05)):y=main_h-(text_h*1.2):fontcolor=white@0.5:box=1:
    boxcolor=0x00000000@0.5" "%a.png"
    pause
    setlocal disabledelayedextension
    )

    -----------------------RESULT FROM RUN 1-------------------------------
    C:\Users\Bud\Desktop\EXIFsubsInImages>(
    call exiftool.exe -FileCreateDate image-0000.jpeg 1>tmpfile.txt
    FOR /F "tokens=1,2,3,4,5,6,7-15* delims=-: " %a in (tmpfile.txt) DO (
    set string1=%e
    set string2=%f
    set string3=%g
    set string4=%h
    set string5=%i
    set string6=%j
    set final=%e\:%f\:%g %h\:%i\:%j
    setlocal enabledelayedextension
    )
    "ffmpeg.exe" -i "image-0000.jpeg" -vf "format=yuv420p,drawtext=fontfile='Arial'
    :fontsize=20:text='Created '=(w-(tw*1.05)):y=main_h-(text_h*1.2):fontcolor=whi
    te@0.5:box=1:boxcolor=0x00000000@0.5" "image-0000.jpeg.png"
    pause
    setlocal disabledelayedextension
    )

    C:\Users\Bud\Desktop\EXIFsubsInImages>(
    set string1=12
    set string2=18
    set string3=01
    set string4=22
    set string5=00
    set string6=06
    set final=12\:18\:01 22\:00\:06
    setlocal enabledelayedextension
    )
    Invalid parameter to SETLOCAL command

    --------AFTER CTRL-C and RERUN SAME SCRIPT-----------------------------
    for %a in (*.jpeg) DO (
    call exiftool.exe -FileCreateDate %a 1>tmpfile.txt
    FOR /F "tokens=1,2,3,4,5,6,7-15* delims=-: " %a in (tmpfile.txt) DO (
    set string1=%e
    set string2=%f
    set string3=%g
    set string4=%h
    set string5=%i
    set string6=%j
    set final=%e\:%f\:%g %h\:%i\:%j
    setlocal enabledelayedextension
    )
    "ffmpeg.exe" -i "%a" -vf "format=yuv420p,drawtext=fontfile='Arial':fontsize =20:
    text='Created 12\:18\:01 22\:00\:06'=(w-(tw*1.05)):y=main_h-(text_h*1.2):fontc
    olor=white@0.5:box=1:boxcolor=0x00000000@0.5" "%a.png"
    pause
    setlocal disabledelayedextension
    )

    ------------RESULT FROM RUN 2------------------------------------
    C:\Users\Bud\Desktop\EXIFsubsInImages>(
    call exiftool.exe -FileCreateDate image-0000.jpeg 1>tmpfile.txt
    FOR /F "tokens=1,2,3,4,5,6,7-15* delims=-: " %a in (tmpfile.txt) DO (
    set string1=%e
    set string2=%f
    set string3=%g
    set string4=%h
    set string5=%i
    set string6=%j
    set final=%e\:%f\:%g %h\:%i\:%j
    setlocal enabledelayedextension
    )
    "ffmpeg.exe" -i "image-0000.jpeg" -vf "format=yuv420p,drawtext=fontfile='Arial'
    :fontsize=20:text='Created 12\:18\:01 22\:00\:06'=(w-(tw*1.05)):y=main_h-(text
    _h*1.2):fontcolor=white@0.5:box=1:boxcolor=0x00000 000@0.5" "image-0000.jpeg.png"

    pause
    setlocal disabledelayedextension
    )

    C:\Users\Bud\Desktop\EXIFsubsInImages>(
    set string1=12
    set string2=18
    set string3=01
    set string4=22
    set string5=00
    set string6=06
    set final=12\:18\:01 22\:00\:06
    setlocal enabledelayedextension
    )
    Invalid parameter to SETLOCAL command
    Quote Quote  
  2. I do not know what is correct syntax for that drawtext filter, it seems to show in wrong way without putting it into Code tags, I just guessed how it should be, but in your script you create variables , like "final" and do not use them later. You can get variable from text file right away , something like that, this is batch script:
    Code:
    for %%a in (*.jpeg) DO (
       exiftool.exe -FileCreateDate %%a 1>tmpfile.txt
       set /p text= < tmpfile.txt
       "ffmpeg.exe" -i "%%a" -vf "format=yuv420p,drawtext="fontfile='Arial':fontsize=20:text='%text%':x=(w-(tw*1.05)):y=main_h-(text_h*1.2):fontcolor=white@0.5:box=1:boxcolor=0x00000000@0.5" "%%~na.png"
    )
    pause
    Quote Quote  
  3. I forgot about that enabledelayedextension looking at it , to avoid setting that setlocal enabledelayedextension, without it it would not even work above,
    Code:
    for %%a in (*.jpeg) DO (
       exiftool.exe -FileCreateDate %%a 1>tmpfile.txt
       set /p text= < tmpfile.txt
       call :ffmpeg  "%%a" "%text%"
    )
    pause
    
    :ffmpeg 
    "ffmpeg.exe" -i "%~1" -vf "format=yuv420p,drawtext="fontfile='Arial':fontsize=20:text='%~2':x=(w-(tw*1.05)):y=main_h-(text_h*1.2):fontcolor=white@0.5:box=1:boxcolor=0x00000000@0.5"" "%%~n1.png"
    goto :eof
    or even with setlocal enabledelayedextension

    Code:
    setlocal enabledelayedextension
    for %%a in (*.jpeg) DO (
       exiftool.exe -FileCreateDate %%a 1>tmpfile.txt
       set /p text= < tmpfile.txt
       "ffmpeg.exe" -i "%%a" -vf "format=yuv420p,drawtext="fontfile='Arial':fontsize=20:text='!text!':x=(w-(tw*1.05)):y=main_h-(text_h*1.2):fontcolor=white@0.5:box=1:boxcolor=0x00000000@0.5"" "%%~na.png"
    )
    pause
    Quote Quote  
  4. Member Budman1's Avatar
    Join Date
    Jul 2012
    Location
    NORTHWEST ILLINOIS, USA
    Search Comp PM
    The syntax is correct for the drawtext and actually works for the second try after CTRL-C and then rerunning it and actually produces the image below. I have changed setlocal EnableExtensions, EnableDelayedExtensions, disableDelayed extensions and disable extensions. Somehow the script works the second try but not the first. It is a mystery to me...

    The Below simply outputs the text from EXIFTOOL to a file called tmpfile.txt which can be called by FFMPEG as a parsed variable (string1, string2, string3, etc.) to be used by FFMPEG:

    exiftool.exe -FileCreateDate %%a 1>tmpfile.txt
    set /p text= < tmpfile.txt

    File Creation Date/Time : 2014 :12:18 01:22:00-06:00

    %%a=File
    %%b=Creation
    %%c=Date/Time
    %%d= :
    %%e string 1=2014
    ...

    Blue begins %%e and The colons must be escaped with'\' in order to work in ffmpeg drawtext use.
    set final=%e\:%f\:%g %h\:%i\:%j


    SECOND RUN Image Produced:
    Name:  ScreenHunter_132 Dec. 24 01.19.jpg
Views: 816
Size:  7.5 KB

    Anybody know why it fails on initial run?
    Last edited by Budman1; 24th Dec 2014 at 01:40.
    Quote Quote  
  5. More than likely it's the nested FOR commands mixed with the multiple lines of commands in brackets. There must be some temporary file being generated by the batch and for some reason it jams on the first run, but on the second run the batch can just skip over the problem hence why you don't get the results you want. Go to folder options in Control Panel and enable display of file extension, then go to the system temp folder (default is Window\Temp) and look for files with odd characters and no extension like $#G!. It might help if you delete everything in the temp first, then run your batch once. If you delete those files then try to run the batch again and it fails you'll know that's what's happening. You would be better off to change the nested FOR's to a call to a secondary batch or a subroutine
    Quote Quote  
  6. Member
    Join Date
    Sep 2012
    Location
    Australia
    Search Comp PM
    E n a b l e d e l a y e d e x p a n s i o n
    Quote Quote  
  7. yes, sorry, I just copied it blindly, SETLOCAL ENABLEDELAYEDEXPANSION it is , all variables that are used again within parentheses, if they were created somewhere above (within those parentheses), have this syntax: !variable! as oppose normal: %variable% syntax, batch script works in a way that all within parentheses is being read first not as one would suggest where a line is being read and executed right away, so you cannot create variable and then use it in other line (within same parentheses) , only SETLOCAL ENABLEDELAYEDEXPANSION fixes that, but you cannot use ! character in script for printing etc., ... because ! character it is used to mark variables

    best to avoid it sometimes is to use subroutines - using call, as in that example, where you get out of that parentheses trap and use normal %variable% syntax, this way, scripts become much more readable if it gets more elaborate ... but sometimes one has to use it for calculations etc.
    Last edited by _Al_; 24th Dec 2014 at 13:53.
    Quote Quote  
  8. Member Budman1's Avatar
    Join Date
    Jul 2012
    Location
    NORTHWEST ILLINOIS, USA
    Search Comp PM
    Sorry so long to reply but I never got notice of posting to remind me...

    I could never get this to work for repetitive images so I Use a GUI that builds and calls the following , with WaitForExit() and then exits the DOS/CMD screen before starting another loop.

    Thanks to everyone that helped and I used a little of each suggestion for the final result:

    ::1.bat
    setlocal()
    Call :2bat
    ffmpeg.exe -i "[foundfile built by GUI]" -vf drawtext="'fontfile=Times New Roman':fontsize=20:text='Created %final%'=(w-tw)/2: y=(h-h)/2: fontcolor=white@0.5: box=1:boxcolor=0x00000000@0.5" "[foundfile built by GUI].png"
    exit

    :2bat
    Call :3bat
    FOR /F "tokens=1,2,3,4,5,6,7-15* delims=-: " %%a in (tmpfile.txt) DO (
    set string1=%%d
    set string2=%%e
    set string3=%%f
    set string4=%%g
    set string5=%%h
    set string6=%%j
    ENDLOCAL & SET final=%%d\:%%e\:%%f %%g\:%%h\:%%i&SET imagepath="[foundfile built by GUI]"&set outpath="[foundfile built by GUI].png"
    echo %final% %imagepath% %outpath%
    )

    :3bat
    call "C:\Users\Bud\Desktop\MEGA_Trimmed_Tabbed_2\bin\De bug\exiftool.exe" -CreateDate -FileCreateDate "[foundfile built by GUI]" > tmpfile.txt


    The result is:
    Click image for larger version

Name:	ScreenHunter_133 Dec. 31 01.59.jpg
Views:	374
Size:	52.1 KB
ID:	29384Click image for larger version

Name:	ScreenHunter_133 Dec. 31 02.00.jpg
Views:	357
Size:	54.8 KB
ID:	29385
    Quote Quote  
  9. Originally Posted by Budman1 View Post
    I could never get this to work for repetitive images so I Use a GUI that builds and calls the following , with WaitForExit() and then exits the DOS/CMD screen before starting another loop.
    You should be able to use "Start /wait ..." in a batch file.
    Quote Quote  
  10. Member Budman1's Avatar
    Join Date
    Jul 2012
    Location
    NORTHWEST ILLINOIS, USA
    Search Comp PM
    I will give the start wait a shot since itvwould be better if it ran all in a batch file. Report more later
    thanks!
    Quote Quote  
  11. I had some time to sit and get my eyes crossed looking at what you had and I think this might do what you want
    Code:
    @ECHO OFF
    FOR %%a IN (*.jpeg) DO (
    FOR /F "usebackq tokens=4,5,6,7,8,9,10,11 delims=-: " %%b IN (`"C:\Users\Bud\Desktop\MEGA_Trimmed_Tabbed_2\bin\De bug\exiftool.exe" -FileCreateDate "%a"`) DO CALL ffmpeg.exe -i "%a" -vf drawtext="'fontfile=Times New Roman':fontsize=20:text='Created %b-%c-%d %e\:%f\:%g-%h\:%i':x=(w-tw)/2: y=(h-h)/2: fontcolor=white@0.5: box=1:boxcolor=0x00000000@0.5" "%~dpna.png"
    )
    I tend to get confused with the usebackq option so if it fails try this version
    Code:
    @ECHO OFF
    FOR %%a IN (*.jpeg) DO (
    FOR /F "tokens=4,5,6,7,8,9,10,11 delims=-: " %%b IN ('"C:\Users\Bud\Desktop\MEGA_Trimmed_Tabbed_2\bin\De bug\exiftool.exe" -FileCreateDate "%a"') DO CALL ffmpeg.exe -i "%a" -vf drawtext="'fontfile=Times New Roman':fontsize=20:text='Created %b-%c-%d %e\:%f\:%g-%h\:%i':x=(w-tw)/2: y=(h-h)/2: fontcolor=white@0.5: box=1:boxcolor=0x00000000@0.5" "%~dpna.png"
    )
    Also, I realize the ffmpeg syntax requires you to escape the colon as it looks like it's treated as a separator, but I don't know about the dash. You might also have to escape it if you get an error from ffmpeg.

    If you want to post code use the advanced post button and click on the HASH button to surround your code with tags, that way things like a colon followed by an X won't get converted to a sickly smiley: : x =>
    Quote Quote  
  12. Member Budman1's Avatar
    Join Date
    Jul 2012
    Location
    NORTHWEST ILLINOIS, USA
    Search Comp PM
    Nic2k4, Thanks for that but either way I get:

    Code:
    C:\Users\Bud\Desktop\EXIFsubsInImages>C:\Users\Bud\Desktop\EXIFsubsInImages\combo2.bat
    The following usage of the path operator in batch-parameter
    substitution is invalid: %~dpna.png"

    For valid formats type CALL /? or FOR /?
    The syntax of the command is incorrect.

    Looks good to me but it always has same error?
    Quote Quote  
  13. Member Budman1's Avatar
    Join Date
    Jul 2012
    Location
    NORTHWEST ILLINOIS, USA
    Search Comp PM
    Okay ... New closer... ran:
    @ECHO OFF
    FOR %%a IN (*.jpeg) DO (
    FOR /F "usebackq tokens=4,5,6,7,8,9,10,11 delims=-: " %%b IN ('"C:\Users\Bud\Desktop
    \MEGA_Trimmed_Tabbed_2\bin\Debug\exiftool.exe" -FileCreateDate "%%a"') DO CALL ffmpeg.exe -i "%%a" -vf
    drawtext="'fontfile=Times New Roman':fontsize=20:text='Created %%b-%%c-%%d %%e\:%%f\:%%g-%%h\:%%i'=
    (w-tw)/2:y=(h-h)/2: fontcolor=white@0.5:box=1:boxcolor=0x00000000@0.5" "%%~dpna.png"
    )

    It created all files but the date embedded in the image says:
    Created image-001.jpeg- ::-:

    I think it is close though.
    Quote Quote  
  14. Originally Posted by Budman1 View Post
    It created all files but the date embedded in the image says:
    Created image-001.jpeg- ::-:
    Doh! Where was my head, of course you need to add one % to compensate the one you lose in a batch.

    You get blanks because the b to i variables didn't get expanded, I don't know where the image and 001.jpeg came from. Maybe the exiftool output is not as expected or it didn't work. I don't think this needs delayed expansion, best to tackle one issue at a time. Copy a couple image files to a test folder and run this batch
    Code:
    FOR %%a IN (*.jpeg) DO CALL "C:\Users\Bud\Desktop\MEGA_Trimmed_Tabbed_2\bin\De bug\exiftool.exe" -FileCreateDate "%%a"
    With echo on you will be able to see how the variable %a gets read at the same time as what exiftool outputs.

    Oops, just noticed you replaced the back quotes with regular quotes in the exiftool command, so exiftool didn't run and only the file name got passed through the %a variable. BTW, did all images get embedded with image-001.jpeg or did the number increase? I'd still like you to run the batch to see the exiftool output.
    Last edited by nic2k4; 1st Jan 2015 at 10:54. Reason: one more thing
    Quote Quote  
  15. Member Budman1's Avatar
    Join Date
    Jul 2012
    Location
    NORTHWEST ILLINOIS, USA
    Search Comp PM
    WHoopee (Almost. this code works but I have been unable to get the results into another directory instead of intermixing into the originals. No amount of changing the final %%~dpna will get it into a folder in this path.

    Code:
    for %%a in (image*.jpeg) do (
    "exiftool" -CreateDate -FileCreateDate "%%a" > single.txt
    FOR /F "tokens=1, 2, 3, 4, 5, 6, 7-15* delims=-: " %%b in (single.txt) DO (
    "ffmpeg.exe" -i "%%a" -vf "format=yuv420p,drawtext=fontfile='Arial':fontsize=20:text='Created %%e\:%%f\:%%g %%h\:%%i\:%%j': x=(w-(tw*1.05)): y=main_h-(text_h*1.2): fontcolor=white@0.5: box=1: boxcolor=0x00000000@0.5" "%%~dpna.png"
    )
    )
    The reason I wrote it this way is to get the output of the exiftool (File Creation Date/Time : 2014:12:17 21:57:19-06:00) into a text file that can be brought in as a variable later that would need to be parsed.

    This is as close as I have gotten thanks to all the help. Either Batch language is awfully picky or else mine is. LOL

    AND Yes I know that 3 minutes until 10:00PM is not that light out but this is an advertisement and not a video from a camera that encodes it's CreateDate. I had to settle for the FileCreateDate for testing. I pull both so if the Createdate displays on the first line, the program will use it. If both are sent to the temporary file, the batch will use the first line or TRUE CreateDate.

    Click image for larger version

Name:	Final.jpg
Views:	341
Size:	63.9 KB
ID:	29416
    Quote Quote  
  16. Does this do what you want
    Code:
    for %%a in (image*.jpeg) do (
    IF NOT EXIST "%%~dpa\processed" MD "%%~dpa\processed"
    "exiftool" -CreateDate -FileCreateDate "%%a" > single.txt
    FOR /F "tokens=1,2,3,4,5,6,7-15* delims=-: " %%b in (single.txt) DO (
    "ffmpeg.exe" -i "%%a" -vf "format=yuv420p,drawtext=fontfile='Arial':fontsize=20:text='Created %%e\:%%f\:%%g %%h\:%%i\:%%j': x=(w-(tw*1.05)): y=main_h-(text_h*1.2): fontcolor=white@0.5: box=1: boxcolor=0x00000000@0.5" "%%~dpaprocessed\%%~na.png"
    )
    )
    Quote Quote  
  17. Member Budman1's Avatar
    Join Date
    Jul 2012
    Location
    NORTHWEST ILLINOIS, USA
    Search Comp PM
    nic2k4, No it makes a folder named %~dpa and then a folder inside named process and says DO was unexpected ( second one) but...

    Code:
    for %%a in (image*.jpeg) do (
    IF NOT EXIST "%%~dpa\processed" MD "%%~dpa\processed"
    "exiftool" -CreateDate -FileCreateDate "%%a" > single.txt 
    FOR /F "tokens=1,2,3,4,5,6,7-15* delims=-: " %%b in (single.txt) DO ( "ffmpeg.exe" -i "%%a" -vf "format=yuv420p,drawtext=fontfile='Arial': fontsize=20: text='Created %%e\:%%f\:%%g %%h\:%%i\:%%j': x=(w-(tw*1.05)): y=main_h-
    (text_h*1.2): fontcolor=white@0.5: box=1: boxcolor=0x00000000@0.5" "%%~dpa\processed\%%~na.png"
    )
    )
    Had to escape the second 'P' since CMD thinks its another path character.

    This one works Great with a New directory. Thanks very much and this will get me there!!!!
    Quote Quote  
  18. Originally Posted by Budman1 View Post
    Had to escape the second 'P' since CMD thinks its another path character.

    This one works Great with a New directory. Thanks very much and this will get me there!!!!
    Excellent. Sorry, another slip up I forgot the backslash on the ffmpeg destination path. Good of you to have fixed it by your lonesome. Just to clear up a little bit of confusion, the \ is not an escape character for CMD or Command, it's a normal path character. The escape character is the caret ^. FFMPEG uses the backslash to escape characters, that's something unique to it.

    Also, your usage of tokens is a little bit off:
    Code:
    FOR /F "tokens=1,2,3,4,5,6,7-15* delims=-: " %%b in (single.txt) DO ( "ffmpeg.exe" -i "%%a" -vf "format=yuv420p,drawtext=fontfile='Arial': fontsize=20: text='Created %%e\:%%f\:%%g %%h\:%%i\:%%j'
    You enumerate all the tokens from 1 to (15+the remainder), but you're only using the 4th (%e), 5th (%f). 6th (%g) and 7th (%h). 7-15 means the 7th to the 15th is one token, add the * and that says everything else that follow the 15th character is also part of that one token %h. So %i and %j will always be blank and not needed and %h could include things you don't expect.

    To properly use tokens and have full control of the results you should change the tokens statement to match only what you need and know is there. If we take the exiftool output you posted before

    File Creation Date/Time : 2014 :12:18 01:22:00-06:00
    and keep in mind that dashes, colons and spaces are delims, the 4th token is 2014, 5th is 12, 6th is 18, 7th is 01, 8th is 22, 9th is 00, 10th is 06 and the 11th is 00. In the FOR command %b is the first variable and is assigned to the first token you declare, %c gets the next and so on. Now you have total control on how you construct the text to display:

    Code:
    FOR /F "tokens=4,5,6,7,8,9,10,11 delims=-: " %%b in (single.txt) DO ( "ffmpeg.exe" -i "%%a" -vf "format=yuv420p,drawtext=fontfile='Arial': fontsize=20: text='Created %%b/%%c/%%d %%e\:%%f\:%%g-%%h\:%%i'
    You can do things like change the colons to slashes for the date.
    Last edited by nic2k4; 1st Jan 2015 at 22:05.
    Quote Quote  
  19. Member Budman1's Avatar
    Join Date
    Jul 2012
    Location
    NORTHWEST ILLINOIS, USA
    Search Comp PM
    Yes you are 100% correct and a lot of that I found the hard way. UGH! but:

    You enumerate all the tokens from 1 to (15+the remainder), but you're only using the 4th (%e), 5th (%f). 6th (%g) and 7th (%h). 7-15 means the 7th to the 15th is one token, add the * and that says everything else that follow the 15th character is also part of that one token %h. So %i and %j will always be blank and not needed and %h could include things you don't expect.

    To properly use tokens and have full control of the results you should change the tokens statement to match only what you need and know is there.
    for some odd reason, %%a is used for the image name and %%b is used for the entire string in single.txt so I assumed %%c was the next I could use but as it turns out, for some odd reason again, the string File Creation Date/Time : 2014:12:17 21:57:19-06:00 gets parsed as

    Code:
    %%a=File
    %%b=Creation
    %%c=Date/Time
    %%d=:
    %%e=2014
    %%f=12
    %%g=17
    %%h=21
    %%i=57
    %%j=19
    I found this by echo %%variable as I went along. Thats why my working example calls %%e as the first (2014) variable, Don't ask me why because most of the 'Normal' batch file entries caused an error.

    Luckily I added the delim of - dash and the 7-15 have delims between them so they end where I needed them. I will put my working BAT file in a safe place and then fix the tokens as you mentioned. LOL

    Just to clear up a little bit of confusion, the \ is not an escape character for CMD or Command, it's a normal path character. The escape character is the caret ^. FFMPEG uses the backslash to escape characters, that's something unique to it.
    Yes I've had that little problem with ffmpeg (since I use it a lot) escaping in some routines like draw and not escaping in others. Cause a pain in the ... but I usually catch it after one failure.

    I might also point out the help was invaluable from everyone because I needed to have a routine that can be called as a batch file in a cmd window and also that can be sent to a CMD window after it is is opened. Trust me the same batch file doesn't work the same both ways due to Visual Studios. Thanks Microsoft.!

    In order to make it work, for anyone that may be interested, with the final working version the coding is like:

    Code:
    If cbCrtImgs2Vid.Checked = True Then
                strFileText = "for %%a in (""" & filepath & "\image*.jpeg"") do (" & vbCrLf
                strFileText = strFileText & "IF NOT EXIST ""%%~dpa\processed"" MD ""%%~dpa\processed""" & vbCrLf
                strFileText = strFileText & """exiftool"" -CreateDate -FileCreateDate ""%%a""  > tmpfile.txt" & vbCrLf
                strFileText = strFileText & "FOR /F ""tokens=1, 2, 3, 4, 5, 6, 7-15* delims=-: "" %%b in (tmpfile.txt) DO (" & vbCrLf
                strFileText = strFileText & """ffmpeg.exe"" -i ""%%a"" -vf ""format=yuv420p,drawtext=fontfile='Arial':" _
                & "fontsize=20:text='Created %%e\:%%f\:%%g %%h\:%%i\:%%j': x=(w-(tw*1.05)): y=main_h-(text_h*1.2): fontcolor=white@0.5:" _
                & " box=1: boxcolor=0x00000000@0.5"" ""%%~dpa\processed\%%~na.png""" & vbCrLf
                strFileText = strFileText & ")" & vbCrLf
                strFileText = strFileText & ")" & vbCrLf
                Debug.Print(strFileText)
    
                '------------write to file.bat
                Dim fnum = FreeFile()
                FileOpen(fnum, "combo.bat", OpenMode.Output)
                Print(fnum, strFileText)
                FileClose(fnum)
    
                '----------writing to cmd screen?
                Dim MyProcess As New Process
                With MyProcess.StartInfo
                    .FileName = "CMD.EXE"
                    .Arguments = "/k C:\Users\Bud\Desktop\MEGA_Trimmed_Tabbed_2\bin\Debug\combo.bat"
                    .UseShellExecute = True
                    .CreateNoWindow = False
                    '.RedirectStandardInput = True
                    '.RedirectStandardOutput = True
                    '.RedirectStandardError = True
                End With
                MyProcess.Start()
            End If
    THANKS AGAIN to all!
    Quote Quote  
  20. Originally Posted by Budman1 View Post
    for some odd reason, %%a is used for the image name and %%b is used for the entire string in single.txt so I assumed %%c was the next I could use but...
    %a is declared in the first FOR command which lists all the files with a jpeg extension. %b is declared in the second FOR command and is associated to the first token in the list, thus the second token gets associated to %c... Microsoft uses %i in its FOR command help examples, so the first token goes with %i, the second %j...

    Originally Posted by Budman1 View Post
    ... as it turns out, for some odd reason again, the string File Creation Date/Time : 2014:12:17 21:57:19-06:00 gets parsed as

    Code:
    %%a=File
    %%b=Creation
    %%c=Date/Time
    %%d=:
    %%e=2014
    %%f=12
    %%g=17
    %%h=21
    %%i=57
    %%j=19
    this batch would produce those results
    Code:
    FOR /F "tokens=1,2,3,4,5,6,7,8,9,10 delims=-: " %%a in (single.txt) DO (
    ECHO %%a
    ECHO %%b
    ECHO %%c
    ECHO %%d
    ECHO %%e
    ECHO %%f
    ECHO %%g
    ECHO %%h
    ECHO %%i
    ECHO %%j
    )
    %d being a colon is the result of another interesting feature, when consecutive delim characters are found in a string only the first one counts the rest get treated as regular text up to the next delim that precedes more regular text. To account for that what I posted before should be changed like this

    Code:
    FOR /F "tokens=5,6,7,8,9,10,11,12 delims=-: " %%b in (single.txt) DO ( "ffmpeg.exe" -i "%%a" -vf "format=yuv420p,drawtext=fontfile='Arial': fontsize=20: text='Created %%b/%%c/%%d %%e\:%%f\:%%g-%%h\:%%i'
    Originally Posted by Budman1 View Post
    Luckily I added the delim of - dash and the 7-15 have delims between them so they end where I needed them. I will put my working BAT file in a safe place and then fix the tokens as you mentioned. LOL
    Delims don't influence the tokens they delimit group of characters in the string that results from FOR processing what's IN the brackets (). I had not played with batch files in a long time it's been a fun review for me.
    Quote Quote  
Visit our sponsor! Try DVDFab and backup Blu-rays!