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 number
und verwenden Sie ihn in For /f
einer Schleife.
3.Wenn 0
es sich um das sortierte Element handelt, ist die Variable skip
nicht 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 ( 0
oder einen anderen Wert bis zu einem maximum
von -1
) handelt, wird durch die Verwendung der Zeile/Datei %%~i
die 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