Camillo Gatto
Camillo Gatto

Reputation: 31

batch that copy list of filesnames from a .txt and generate another .txt

I start with this example: I have a file called concatlist.txt that contain a list of real .mxf files, for example

CONCATLIST.TXT

c:\myfolder\C0060.MXF 
c:\myfolder\C0061.MXF 
c:\myfolder\C0062.MXF 
c:\myfolder\C0063.MXF 
c:\myfolder\C0064.MXF
c:\myfolder\C0065.MXF 
c:\myfolder\C0066.MXF 
c:\myfolder\C0067.MXF 
c:\myfolder\C0068.MXF 
c:\myfolder\C0069.MXF 
c:\myfolder\C0070.MXF 
c:\myfolder\C0071.MXF 
c:\myfolder\C0072.MXF 
c:\myfolder\C0060.MXF 
c:\myfolder\C0061.MXF 
c:\myfolder\C0062.MXF 
c:\myfolder\C0063.MXF 
c:\myfolder\C0064.MXF 
c:\myfolder\C0065.MXF 
c:\myfolder\C0066.MXF 
c:\myfolder\C0067.MXF 
c:\myfolder\C0068.MXF 
c:\myfolder\C0069.MXF 
c:\myfolder\C0070.MXF 
c:\myfolder\C0071.MXF 
c:\myfolder\C0072.MXF

I would like create a batch script that from the concatlist.txt create a target.txt in wich each filename_and_pathfile is putted like this .txt file:

SetMemoryMax(16)
LoadPlugin("v:\automazioneclip\avisynth\plugins\LSMASHSource.dll")

videofile0 = LWLibavVideoSource("c:\myfolder\C0060.MXF")
audiofile0 = LWLibavAudioSource("c:\myfolder\C0060.MXF")
file0 = audiodub(videofile0,audiofile0)

videofile1 = LWLibavVideoSource("c:\myfolder\C0061.MXF")
audiofile1 = LWLibavAudioSource("c:\myfolder\C0061.MXF")
file1 = audiodub(videofile1,audiofile1)

videofile2 = LWLibavVideoSource("c:\myfolder\C0062.MXF")
audiofile2 = LWLibavAudioSource("c:\myfolder\C0062.MXF")
file2 = audiodub(videofile2,audiofile2)

videofile3 = LWLibavVideoSource("c:\myfolder\C0063.MXF")
audiofile3 = LWLibavAudioSource("c:\myfolder\C0063.MXF")
file3 = audiodub(videofile3,audiofile3)

videofile4 = LWLibavVideoSource("c:\myfolder\C0064.MXF")
audiofile4 = LWLibavAudioSource("c:\myfolder\C0064.MXF")
file4 = audiodub(videofile4,audiofile4)

videofile5 = LWLibavVideoSource("c:\myfolder\C0065.MXF")
audiofile5 = LWLibavAudioSource("c:\myfolder\C0065.MXF")
file5 = audiodub(videofile5,audiofile5)

videofile6 = LWLibavVideoSource("c:\myfolder\C0066.MXF")
audiofile6 = LWLibavAudioSource("c:\myfolder\C0066.MXF")
file6 = audiodub(videofile6,audiofile6)

videofile7 = LWLibavVideoSource("c:\myfolder\C0067.MXF")
audiofile7 = LWLibavAudioSource("c:\myfolder\C0067.MXF")
file7 = audiodub(videofile7,audiofile7)

videofile8 = LWLibavVideoSource("c:\myfolder\C0068.MXF")
audiofile8 = LWLibavAudioSource("c:\myfolder\C0068.MXF")
file8 = audiodub(videofile8,audiofile8)

videofile9 = LWLibavVideoSource("c:\myfolder\C0069.MXF")
audiofile9 = LWLibavAudioSource("c:\myfolder\C0069.MXF")
file9 = audiodub(videofile9,audiofile9)

videofile10 = LWLibavVideoSource("c:\myfolder\C0070.MXF")
audiofile10 = LWLibavAudioSource("c:\myfolder\C0070.MXF")
file10 = audiodub(videofile10,audiofile10)

videofile11 = LWLibavVideoSource("c:\myfolder\C0071.MXF")
audiofile11 = LWLibavAudioSource("c:\myfolder\C0071.MXF")
file11 = audiodub(videofile11,audiofile11)

videofile12 = LWLibavVideoSource("c:\myfolder\C0072.MXF")
audiofile12 = LWLibavAudioSource("c:\myfolder\C0072.MXF")
file12 = audiodub(videofile12,audiofile12)    
file0++file1++file2++file3++file4++file5++file6++file7++file8++file9++file10++file11++file12

Another example:

assumed the concatList.txt is this

c:\cats\catsVideoA.MXF
c:\dogs\dogsVideoB.MXF

the batch should generate this target.txt:

SetMemoryMax(16)
LoadPlugin("v:\automazioneclip\avisynth\plugins\LSMASHSource.dll")

videofile0 = LWLibavVideoSource("c:\cats\catsVideoA.MXF")
audiofile0 = LWLibavAudioSource("c:\cats\catsVideoA.MXF")
file0 = audiodub(videofile0,audiofile0)

videofile1 = LWLibavVideoSource("c:\dogs\dogsVideoB.MXF")
audiofile1 = LWLibavAudioSource("c:\dogs\dogsVideoB.MXF")
file1 = audiodub(videofile1,audiofile1)
file0++file1

Upvotes: 0

Views: 51

Answers (2)

dbenham
dbenham

Reputation: 130919

Here is a variant that can support an "unlimited" concatlist size. (not really unlimited, but a much bigger number than will ever be practical)

I also avoid delayed expansion so ! does not cause any problems in file paths.

@echo off
setlocal disableDelayedExpansion
call :createFile >target.txt
exit /b

:createFile
echo SetMemoryMax(16)
echo LoadPlugin("v:\automazioneclip\avisynth\plugins\LSMASHSource.dll")

for /f "tokens=1* delims=:" %%A in ('findstr /n "^" "concatlist.txt"') do (
  echo(
  echo videofile%%A = LWLibavVideoSource("%%B"^)
  echo audiofile%%A = LWLibavAudioSource("%%B"^)
  echo file%%A = audiodub(videofile%%A,audiofile%%A^)
  set "cnt=%%A"
)

set /a cnt2=cnt-1
for /l %%N in (1 1 %cnt2%) do <nul set /p "=file%%N++"
echo file%cnt%

exit /b

EDIT

If you really insist that the numbering begin with 0 instead of 1, then it is best to revert back to using SET /A to keep track of the count.

@echo off
setlocal disableDelayedExpansion
call :createFile >target.txt
type target.txt
exit /b

:createFile
echo SetMemoryMax(16)
echo LoadPlugin("v:\automazioneclip\avisynth\plugins\LSMASHSource.dll")

set /a cnt=0
for /f "usebackq eol=: delims=" %%A in ("concatlist.txt") do (
  echo(
  setlocal enableDelayedExpansion
  for %%N in (!cnt!) do (
    endlocal
    echo videofile%%N = LWLibavVideoSource("%%A"^)
    echo audiofile%%N = LWLibavAudioSource("%%A"^)
    echo file%%N = audiodub(videofile%%N,audiofile%%N^)
  )
  set /a cnt+=1
)

<nul set /p "=file0"
for /l %%N in (1 1 %cnt%) do <nul set /p "=++file%%N"
echo(

exit /b

Upvotes: 0

foxidrive
foxidrive

Reputation: 41287

Test this code:

@echo off
setlocal enabledelayedexpansion
set num=0
(
echo SetMemoryMax(16^)
echo LoadPlugin("v:\automazioneclip\avisynth\plugins\LSMASHSource.dll"^)

for /f "usebackq delims=" %%a in ("CONCATLIST.TXT") do (
echo(
set line=!line!++file!num!
echo videofile!num! = LWLibavVideoSource("%%a"^)
echo audiofile!num! = LWLibavAudioSource("%%a"^)
echo file!num! = audiodub(videofile!num!,audiofile!num!^)
set /a num+=1
)
echo !line:~2!
)>"target.txt"

Upvotes: 1

Related Questions