Zufälliges Ersetzen von Dateien aus der Liste (Batch-Datei)

Zufälliges Ersetzen von Dateien aus der Liste (Batch-Datei)

Ich brauche Hilfe beim Erstellen einer Batchdatei. Der Kern des Problems besteht darin, dass ich eine zufällige Datei (aus der Anzahl der N Dateien) auswählen und in ein anderes Verzeichnis verschieben muss (wobei die alte Datei ersetzt wird).

Ich habe versucht, diesen Code hier zu verwenden:

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
 )

Antwort1

@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

In diesem Fall ermitteln Sie den Pfad Ihrer zu kopierenden Datei durch eine Zufallsauswahl im Bereich 1 und der Gesamtzahl der Zeilen in Ihrer Textdatei.

1.Verwenden Sie den Bereich -/+Gesamtzeilenzahl -1:100 lines == range [-100-1] - [+100-1]

2.Wenden Sie diesen Wert auf skip=?die vorherigen Zeilen an, legen Sie ihn fest skip= resulting numberund verwenden Sie ihn in For /feiner Schleife.

3.Wenn 0es sich um das sortierte Element handelt, ist die Variable skipnicht gesetzt und stört nicht, da das erste Element abgerufen werden kann. Es wird keine Zeile übersprungen.

4.Unabhängig davon, ob es sich bei den Zeilen um ( 0oder einen anderen Wert bis zu einem maximumvon -1) handelt, wird durch die Verwendung der Zeile/Datei %%~idie Schleife sofort verlassen.


Eine Option zum Entfernen der zufällig erhaltenen Zeile ...

@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

verwandte Informationen