Сценарий пакетного файла Windows, чтобы выбрать случайные файлы из папки и переместить их в другую папку - PullRequest
5 голосов
/ 05 апреля 2011

Мне нужен пакетный скрипт, чтобы случайным образом выбрать X файлов в папке и переместить их в другую папку.Как мне написать пакетный скрипт Windows, который может это сделать?

Ответы [ 4 ]

8 голосов
/ 05 апреля 2011

(я предполагаю, что ваш X заранее известен - представлен переменной $x в следующем коде).

Поскольку вы не были против решения PowerShell:

Get-ChildItem SomeFolder | Get-Random -Count $x | Move-Item -Destination SomeOtherFolder

или короче:

gci somefolder | random -c $x | mi -dest someotherfolder
3 голосов
/ 05 апреля 2011

Следующий пакетный код сделает это. Обратите внимание, что вам нужно будет запустить cmd с помощью следующей командной строки:

cmd /v:on

для включения отложенного расширения переменной среды. Также обратите внимание, что он выберет случайное количество файлов от 0 до 32767 - вы, вероятно, захотите изменить эту часть, чтобы она соответствовала вашим требованиям!

@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
      )
2 голосов
/ 04 декабря 2013

вот код CMD, который выводит произвольное имя файла (подгоняйте его под свои нужды):

@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 голосов
/ 16 октября 2017
@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

из Необходимо создать пакетный файл, чтобы выбрать один случайный файл из папки и скопировать в другую папку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...