Page 1 of 1
How to duplicate randomly some files ?
Posted: 05 Sep 2010 07:12
by budhax
Hello,
Let's a folder containing some PDF files:
Code: Select all
GeM-13117.pdf
GeM-14404.pdf
GeM-16853.pdf
GeM-17914.pdf
GeM-20255.pdf
GeM-20559.pdf
SOS-647272.pdf
SOS-665824.pdf
SOS-668677.pdf
SOS-674574.pdf
SOS-676535.pdf
I would write a batch script duplicating randomly some files.
The duplicated files will be ended by "_".
EXAMPLE: 4 files duplicated randomly.
Code: Select all
GeM-13117.pdf
GeM-14404.pdf
GeM-16853.pdf
GeM-16853_.pdf
GeM-17914.pdf
GeM-20255.pdf
GeM-20559.pdf
SOS-647272.pdf
SOS-647272_.pdf
SOS-665824.pdf
SOS-665824_.pdf
SOS-668677.pdf
SOS-668677_.pdf
SOS-674574.pdf
SOS-676535.pdf
Any idea how to start this script?
Thanks
Re: How to duplicate randomly some files ?
Posted: 05 Sep 2010 07:41
by orange_batch
Ah boy, randomization.
>Count and log .pdfs in folder.
>Get number of .pdfs to copy by generating a random number from 1 to length of log using modulus.
>Get .pdf to copy by generating a random number from 1 to length of log using modulus.
Either more easily:
-If undefined log variable is selected, repeat without any decrements.
-If defined, process that .pdf and erase it from the log, decrement number of .pdfs to copy and repeat.
Or more properly:
-Process that .pdf and erase it from the log, merge log, decrement number of .pdfs to copy and repeat.
This is the proper method with log merging. You're lucky I felt up to this one, I had already written a couple of the routines.
Code: Select all
@echo off&echo:&color B&title Copy Random Number of Files Randomly by orange_batch&setlocal enableextensions,enabledelayedexpansion
:: Customizable options.
set "_targetfolder=C:\...\Target Folder"
set "_suffix=_"
set "_filetype=.pdf"
:: Log files in target folder.
for %%x in ("%_targetfolder%\*%_filetype%") do (
set /a _loglength+=1
set "_log!_loglength!=%%x"
)
:: Get random number of files to copy.
set /a _repeats=%random%%%%_loglength%+1
:l_repeat
:: Copy a random file. Erase file's log for log merging.
set /a _any=%random%%%%_loglength%+1
echo:f|xcopy "!_log%_any%!" "!_log%_any%:~0,-4!%_suffix%%_filetype%" /v/q/g/h/k/x>nul
set _log%_any%=
:: Merge log.
set _logcounter=
for /l %%x in (1,1,%_loglength%) do (
if defined _log%%x (
set /a _logcounter+=1
set "_log!_logcounter!=!_log%%x!"
if !_logcounter! NEQ %%x set _log%%x=
))
set /a _loglength-=1
:: Decrement number of repeats. Repeat if number is greater than 0.
set /a _repeats-=1
if %_repeats% NEQ 0 goto l_repeat
echo: Complete.
exit/b
Re: How to duplicate randomly some files ?
Posted: 05 Sep 2010 09:39
by !k
budhaxCode: Select all
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "delims=" %%i in ('dir /a-d/b *.pdf') do if !random:~-1! LSS 3 copy /b "%%i" "%%~ni_%%~xi"
or w/o enabledelayedexpansion
Code: Select all
@echo off
setlocal enableextensions
for /f "delims=" %%i in ('dir /a-d/b *.pdf') do call :r "%%i"
goto :eof
:r
if %random:~-1% LSS 3 copy /b %1 "%~n1_%~x1"
goto :eof
Re: How to duplicate randomly some files ?
Posted: 05 Sep 2010 19:14
by ghostmachine4
download
gawk for windows, then use this script
Code: Select all
BEGIN{
howmany = 4 #how many files you want to randomize
#random seed
srand(systime())
# Get all pdf files into array
for(i=1;i<=ARGC;i++){ filename[++c]=ARGV[i] }
while(1){
RAND=int(rand()*c+1) # generate a random number
if (! (RAND in r ) ){
r[RAND] #store random number already generated
fn2=filename[RAND]
sub(/\.pdf/,"_.pdf",fn2) # replace with "_"
cmd="ren \042"filename[RAND]"\042 \042" fn2
print cmd
#system(cmd) #uncomment to do actual renaming
z++
if(z==howmany){
break
}
}
}
}
save as myscript.awk and on command line
Code: Select all
C:\test>gawk -f myscript.awk *pdf
ren "SOS-674574.pdf" "SOS-674574_.pdf
ren "SOS-668677.pdf" "SOS-668677_.pdf
ren "GeM-17914.pdf" "GeM-17914_.pdf
ren "012345(2).pdf" "012345(2)_.pdf
Re: How to duplicate randomly some files ?
Posted: 06 Sep 2010 10:32
by orange_batch
!k wrote:Code: Select all
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "delims=" %%i in ('dir /a-d/b *.pdf') do if !random:~-1! LSS 3 copy /b "%%i" "%%~ni_%%~xi"
Cool idea, I think it's less random though being 30% chance. It also assumes 0 is okay.
Re: How to duplicate randomly some files ?
Posted: 06 Sep 2010 17:42
by !k
orange_batch wrote:30% chance. It also assumes 0 is okay.
Code: Select all
@echo off
setlocal enableextensions
set /a cnt=0
:loop
for /f "delims=" %%i in ('dir /a-d/b *.pdf') do call :r "%%i"
if %cnt% LSS 1 goto :loop
goto :eof
:r
if %random:~-1% LSS 3 (copy /b %1 "%~n1_%~x1" &set /a cnt+=1)
goto :eof
30% chance with at least 1 file

Re: How to duplicate randomly some files ?
Posted: 13 Sep 2010 13:04
by budhax
Thanks all, it works fine.
This is exactly what I needed.