[ACCEPTED]-windows batch file script to pick random files from a folder and move them to another folder-batch-file
(I'm assuming that your X is known beforehand 3 – represented by the variable $x
in 2 the following code).
Since you weren't adverse 1 to a PowerShell solution:
Get-ChildItem SomeFolder | Get-Random -Count $x | Move-Item -Destination SomeOtherFolder
or shorter:
gci somefolder | random -c $x | mi -dest someotherfolder
The following Batch code will do it. Note 6 that you will need to launch cmd using the 5 following command line:
cmd /v:on
to enable delayed 4 environment variable expansion. Note also 3 that it will pick a random number of files 2 from 0 to 32767 - you will probably want 1 to modify this part to fit your requirements!
@ECHO OFF
SET SrcCount=0
SET SrcMax=%RANDOM%
FOR %F IN (C:\temp\source\*.*) DO IF !SrcCount! LSS %SrcMax% (
SET /A SrcCount += 1
ECHO !SrcCount! COPY %F C:\temp\output
COPY %F C:\temp\output
)
here is a CMD code, which outputs the random file name (customize it to your needs):
@echo off & setlocal
set "workDir=C:\source\folder"
::Read the %random%, two times is'nt a mistake! Why? Ask Bill.
::In fact at the first time %random% is nearly the same.
@set /a "rdm=%random%"
set /a "rdm=%random%"
::Push to your path.
pushd "%workDir%"
::Count all files in your path. (dir with /b shows only the filenames)
set /a "counter=0"
for /f "delims=" %%i in ('dir /b ^|find "."') do call :sub1
::This function gives a value from 1 to upper bound of files
set /a "rdNum=(%rdm%*%counter%/32767)+1"
::Start a random file
set /a "counter=0"
for /f "delims=" %%i in ('dir /b ^|find "."') do set "fileName=%%i" &call :sub2
::Pop back from your path.
popd "%workDir%"
goto :eof
:: end of main
:: start of sub1
:sub1
::For each found file set counter + 1.
set /a "counter+=1"
goto :eof
:: end of sub1
:: start of sub2
:sub2
::1st: count again,
::2nd: if counted number equals random number then start the file.
set /a "counter+=1"
if %counter%==%rdNum% (
:: OUTPUT ALERT BOX with FILENAME
MSG * "%fileName%"
)
goto :eof
:: end of sub2
0
@echo off
setlocal EnableDelayedExpansion
cd \particular\folder
set n=0
for %%f in (*.*) do (
set /A n+=1
set "file[!n!]=%%f"
)
set /A "rand=(n*%random%)/32768+1"
copy "!file[%rand%]!" \different\folder
from Need to create a batch file to select one random file from a folder and copy to another folder
0
A sample Powershell code that Moves 1000 Random files From C:\Test\A To C:\Test\B
$d = gci "C:\Test\A" | resolve-path | get-random -count 1000
Press 2 Enter key and then execute below code
Move-Item $d -destination "C:\Test\B"
Don't forget 1 to add " mark before and after the path of the folders
More Related questions
We use cookies to improve the performance of the site. By staying on our site, you agree to the terms of use of cookies.