1

Мне не достаточно написать какой-либо пакетный скрипт, поэтому я как-то разобрал это решение из других источников. Это делает работу; копирует файлы из каталога (и всех его подкаталогов) в другой каталог, по-видимому, случайным образом.

Однако он не может скопировать полное количество файлов, и я не уверен, почему. Если я установлю его на 10, он возвращает, может быть, 7 или 8. Есть идеи? Благодарю.

@echo off
setlocal

:: Create numbered list of files in a temporary file
set "tempFile=%temp%\%~nx0_fileList_%time::=.%.txt"
dir "D:\Users\...\Music" /b /s /a-d %1 | findstr /n "^" >"%tempFile%"

:: Count the files
for /f %%N in ('type "%tempFile%" ^| find /c /v ""') do set cnt=%%N

:: Copy number random files, doesn't get them all though?
for /l %%N in (1 1 100) do call :copyRandomFile

:: Delete the temp file
del "%tempFile%"

exit /b

:copyRandomFile
set /a "randomNum=(%random% %% cnt) + 1"
for /f "tokens=1* delims=:" %%A in (
'findstr "^%randomNum%:" "%tempFile%"'
) do xcopy "%%B" "D:\Users\...\Playlists\Random"
exit /b

Редактировать: Извините, чтобы объяснить дальше: у меня есть папка, полная музыки (хотя она отсортирована в разных подкаталогах по исполнителям и т.д.), И я хочу произвольно выбрать 100 файлов и скопировать их в мою выходную папку, чтобы по существу иметь произвольный список воспроизведения из 100 песен для переноса на mp3-плеер. Приведенный выше код делает это, но по некоторым причинам он не копирует необходимое количество файлов.

1 ответ1

0

Должна ли это быть партия Windows? Если нет, то в этой теме есть решение Powershell, а также некоторый пакетный код.

Powershell:

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

Это предполагает, что вы запускаете скрипт из папки, в которой находятся ваши файлы. Замените SomeFolder на путь к вашим файлам, а SomeOtherFolder на желаемый пункт назначения.

Чтобы объяснить немного дальше:

Get-ChildItem -Path C:\path\to\directory    # Lists content of the directory
                                            # To get subfolders you have to add -Recurse
                                            # to limit this only to files add -Files

Get-Random -Count $x                        # Selects x random items from previous command.
                                            # You have to define $x beforehand

Copy-Item -Destination C:\path\to\destination   # Copies the random selected files to 
                                                # your defined destination

Вы можете скопировать этот код в текстовый файл, сохранив его как * .ps1, щелкнув правой кнопкой мыши на PowerShell.

Возможно, возможно, что PowerShell выдает ошибку, например, сценарий не может быть загружен, потому что выполнение сценариев отключено в этой системе.

Если это так, вы должны запустить powershell от имени администратора и запустить Set-ExecutionPolicy RemoteSigned

Примечание. Еще один недостаток, который я обнаружил во время тестирования, заключается в том, что Get-Random может получить один и тот же элемент несколько раз. доказательство

Чтобы предотвратить это, я рекомендую команду Get-Unique .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .