Reemplazo aleatorio de archivos de la lista (archivo por lotes)

Reemplazo aleatorio de archivos de la lista (archivo por lotes)

Necesito ayuda para crear un archivo por lotes. El quid del problema es que necesito seleccionar aleatoriamente un archivo (de la cantidad de N archivos) y moverlo a otro directorio (reemplazando el archivo anterior)

Intenté usar este código aquí:

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
 )

Respuesta1

@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

Este es el caso para obtener la ruta de su archivo a copiar, usando un sorteo aleatorio en el rango 1 y el número total de líneas en su archivo de texto.

1.Utilice el rango -/+número total de líneas -1:100 lines == range [-100-1] - [+100-1]

2.Utilice este valor para skip=?las líneas anteriores, configure skip= resulting numbery utilícelo en For /fel bucle.

3.Si 0es el ordenado, la variable to skipno se establece y no interfiere, haciendo que el primer elemento que se obtenga no se salte ninguna línea.

4.Independientemente de si las líneas son ( 0u otro valor hasta a maximumof -1), use la línea/archivo %%~ipara salir inmediatamente del bucle.


Una opción para eliminar la fila obtenida al azar...

@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

información relacionada