Случайная замена файлов из списка (bat-file)

Случайная замена файлов из списка (bat-file)

Мне нужна помощь в создании пакетного файла. Суть проблемы в том, что мне нужно случайным образом выбрать файл (из числа N файлов) и переместить его в другой каталог (заменив старый файл)

Я попробовал использовать этот код здесь:

for /f "usebackq delims=" %%i in ("example.txt") do (
 call set $%%random%%=%%i
 )
for /f "delims==" %%i in ('set $') do (
 replace D:\test\Z\TEST /R
 exit /b
 )

решение1

@echo off

setlocal & set "_dir=%Temp%\Test\Target\."

for /f %%f in ('type example.txt^|find/v /c ""')do set /a "_max=%%~f-1"
set /a "_line=%random% * (-%_max% - %_max% + 1) / 32768 + %_max%"

if %_line% neq 0 set "_skip=skip^=%_line:-=%"

for /f %_skip%^usebackq^ ^tokens^=*^ ^delims^= %%i in (
    "example.txt")do move/y "%%~i" "%_dir%" & endlocal & exit /b

Это тот случай, когда путь к файлу, который нужно скопировать, выбирается случайным образом в диапазоне от 1 до общего количества строк в текстовом файле.

1.Используйте диапазон -/+общее количество строк -1:100 lines == range [-100-1] - [+100-1]

2.Используйте это значение в skip=?предыдущих строках, установив skip= resulting number, и используйте его в For /fцикле.

3.Если 0отсортирован, то переменная to skipне устанавливается и не вмешивается, в результате чего получается первый элемент, ни одна строка не пропускается.

4.Независимо от того, являются ли строки ( 0или другое значение до a maximumиз -1), использование строки/файла %%~iнемедленно приводит к выходу из цикла.


Возможность удалить строку a, полученную случайным образом...

@echo off

setlocal & set "_dir=%Temp%\Test\Target\."
for /f %%f in ('type ".\example.txt" ^| find/v /c ""
')do if %%~f geq 1 (set /a "_max=%%~f-1")else goto :eof

set /a "_line=%random% * (-%_max% - %_max% + 1) / 32768 + %_max%"
 
if %_line% neq 0 set "_skip=skip^=%_line:-=%"
for /f %_skip%^usebackq^ ^tokens^=*^ ^delims^= %%i in (
     "example.txt")do set "_file=%%~i" && goto %:^)
    
%:^)
findstr /v /c:"%_file%" <".\example.txt" >"%temp%\example.txt"
move /y "%_file%" "%_dir%" && move/y "%temp%\example.txt" ".\example.txt"
endlocal & goto :eof

Связанный контент