windows batch file script to pick random files from a folder and move them to another folder

后端 未结 4 1220
小蘑菇
小蘑菇 2020-12-10 07:21

I need a batch script to randomly select X number of files in a folder and move them to another folder. How do I write a windows batch script that can do this?

相关标签:
4条回答
  • 2020-12-10 07:33
    @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 讨论(0)
  • 2020-12-10 07:37

    (I'm assuming that your X is known beforehand – represented by the variable $x in the following code).

    Since you weren't adverse 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
    
    0 讨论(0)
  • 2020-12-10 07:42

    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 讨论(0)
  • 2020-12-10 07:50

    The following Batch code will do it. Note that you will need to launch cmd using the following command line:

    cmd /v:on
    

    to enable delayed environment variable expansion. Note also that it will pick a random number of files from 0 to 32767 - you will probably want 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
          )
    
    0 讨论(0)
提交回复
热议问题