2013-10-16 3 views
3

다른 MAC 주소를 무작위로 스트립하는 코드를 만드는 중이지만이를 수행하는 방법을 알 수는 없습니다. 이 방법에 대한 내 생각은 무작위로 또는이 스크립트를 사용하여 텍스트 파일에서 MAC 주소의 순서를 다시 정렬 할 수 있지만 배치 파일을 사용하여이를 수행하는 방법을 알아낼 수 없습니다. 이것이 작동하는 방법은 "maclist.txt"를 읽은 다음 랜덤 순서 "maclist_temp.txt"로 새 임시 파일을 생성합니다.이 임시 파일은 재배치 된 파일이됩니다. 그런 다음이 임의 화 된 파일을 순서대로 가져옵니다.배치 파일을 사용하여 텍스트 파일의 줄을 임의로 재정렬하는 방법

Google을 사용해 보았지만 웹을 검색했지만 너무 유용한 것은 없습니다. 나는 여전히 적극적으로 찾고 있지만 조언은 매우 유용 할 것입니다.

임의의 줄을 추출하고 삭제 한 다음 맨 아래에 추가하는 것이 간단 할 수도 있습니다. 무작위 화가 더 낫지 만 원본 목록을 유지하고 싶습니다. 뭔가 같은 :

  1. maclist_temp.txt라는 maclist.txt의 임시 복사본을 만들고, 하나 개의 임의의 MAC 주소를 가지고 바닥

에 maclist_temp.txt

  • 다시 추가 그것에서 제거 그것이 내가 원하는 모든 것이지만 어떤 제안이라도 환영합니다.

  • +0

    당신은에서 - 적어도 두 개의 임시 파일을해야하며, 중첩 된'for' 루프 – Monacraft

    +0

    리눅스의 경우는, 이러한 도움이 될 : [에서 임의의 선을 선택 bash에있는 파일] (http://stackoverflow.com/questions/9245638/select-random-lines-from-a-file-in-bash), [Unix 명령에서 파일의 무작위 라인을 읽는 쉬운 방법은 무엇입니까? 줄?] (http://stackoverflow.com/questions/448005/whats-an-easy-way-to-read-random-line-from-a-file-in-unix-command-line) – Uours

    +0

    나는 Linux가 아니라 Windows 7 사용자입니다. 또한 for 중첩 루프는 무엇입니까? – computerlife22

    답변

    6

    batch file을 시도하면 maclist.txt을 섞을 수 있습니다. 배치 코드의 사용이 명령을 실행 한 후에 maclist_temp.txt MAC 주소의 무작위 목록을 포함

    C:\> type list.txt | shuffle.bat > maclist_temp.txt 
    

    입니다.

    희망이 도움이됩니다.

    +2

    큰 파일에는 작동하지 않습니다 .... –

    1

    이것은 작동하는 것 같습니다. 무작위화할 파일의 명령 줄 매개 변수를 입력하십시오.

    @echo off 
        setlocal EnableDelayedExpansion 
    
        rem read the number of lines in the file 
        rem the find prepends the line number so we catch blank lines 
        for /f "delims=" %%n in ('find /c /v "" %1') do set "len=%%n" 
        set len=!len:*: =! 
        rem echo %1 has %len% lines 
    
        rem Relocate as many lines as there are lines in the file 
        for /l %%j in (1 1 !len!) do (
         rem echo starting round %%j 
    
         rem geta random number between 1 and the number of lines in the file 
         set /a var=!random! %% !len! + 1 
         rem echo relocating line !var! 
    
         rem make sure there is no temp file 
         if exist %1.temp del %1.temp 
    
         rem read each line of the file, write any that don't match and then write the one that does 
         <%1 (
         for /l %%i in (1 1 !len!) do (
    
          rem if it is the target line then save it 
          if %%i == !var! (
          set /p found= 
          rem echo saving !found! 
         ) 
    
          rem if it is the target line then write it 
          if not %%i == !var! (
          set /p other= 
          rem echo writing !other! 
          echo !other!>> %1.temp 
         ) 
         ) 
         rem now write the target line at the end 
         rem echo appending !found! 
         echo !found!>> %1.temp 
        ) 
    
         rem replace the original with the temp version 
         move %1.temp %1>nul 
        ) 
    
        rem print the result 
        type %1 
    
    +0

    광산은 shuffle.bat보다 훨씬 복잡합니다 - 왜 그렇게 생각하지 않았습니까 ??? –

    3

    여기/랜덤 파일, 필요없는 임시 파일을 randomise하는 간단한 방법입니다. 동일한 입력 파일을 재사용 할 수도 있습니다.

    제한 사항은 다음과 같습니다 =로 시작하는 빈 라인과 ;를 건너 뜁니다로 시작하는 라인, 라인은 모든 주요 = 표시 제거 및 ^ 문자가 두 배가되어있을 것이다. cmd를 파일

    @echo off 
    setlocal 
    for /f "delims=" %%a in (maclist.txt) do call set "$$%%random%%=%%a" 
    (for /f "tokens=1,* delims==" %%a in ('set $$') do echo(%%b)>newmaclist.txt 
    endlocal 
    
    +0

    한가지 더 제한이 있습니다 : 리터럴 '%'표지판은 길을 잃습니다 ... 좋은 접근법! 아마 당신은 잠재적 인 중복'임의의 숫자로 문제를 해결하는 [내 대답] (http://stackoverflow.com/a/39008715)에 관심이 있습니다 ... – aschipfl

    1

    장소

    for /f "tokens=2 delims=/" %%m in ('cmd /e:on /v:on /c "for /f %%f in (maclist.txt) do @echo !random!/%%f" ^| sort') do echo %%m 
    

    그것은 대 내부의 MAC리스트를 판독하는 임의의 값과 맥 슬래시 접두사 및 목록을 정렬 cmd를 급부상. 그런 다음이 목록은 슬래시를 구분 기호로 사용하고 MAC 주소를 인쇄하기 위해 아웃터에서 분리됩니다.

    0

    나는 정말로 foxidriveapproach을 좋아합니다. 그럼에도 불구하고 나열된 모든 제한 사항을 제거한 솔루션을 제공하고자합니다 (cmd 관련 파일 크기는 < 2 GiB이고 줄 길이는 < ~ 8KB 임).

    키는 delayed expansion이며, Explamation 표시를 잃지 않기 위해 토글해야합니다.이 ^, &, %, !, (, ), <, >, |" 같은 특수 문자가 포함 된 모든 잠재적 인 문제를 해결합니다.

    index은 원래 텍스트 파일의 한 줄을 잃지 않기 위해 구현되었습니다. random은 중복 값을 반환 할 수 있기 때문에없이 발생할 수 있습니다. index이 추가 된 경우 결과 변수 이름은 $$!random!.!index!입니다.

    findstr /N /R "^" 명령은 원래 파일의 모든 줄 앞에 줄 번호와 콜론이 오는 것보다 우선합니다. 따라서 무시할 루프는 for /F 루프에 비어있는 것으로 나타나지 않습니다. 줄 번호는 또한 암시 적으로 선도 세미콜론으로 문제를 해결합니다. 기본값은 eolfor /F입니다.

    마지막으로, 출력되기 전에 모든 행에서 첫 번째 콜론 (앞의 접두사가 findstr 인 것을 기억하십시오)을 제외한 모든 것이 제거되므로 더 이상 선행 등호는 제거되지 않습니다. 그래서 여기

    코드입니다 :

    @echo off 
    setlocal EnableExtensions DisableDelayedExpansion 
    
    set /A "index=0" 
    for /f "delims=" %%a in ('findstr /N /R "^" "%~dpn0.lst"') do (
        setlocal EnableDelayedExpansion 
        for /F %%b in ("$$!random!.!index!") do (
         endlocal 
         set "%%b=%%a" 
        ) 
        set /A "index+=1" 
    ) 
    > "%~dpn0.new" (
        for /f "delims=" %%a in ('set $$') do (
         set "item=%%a" 
         setlocal EnableDelayedExpansion 
         echo(!item:*:=! 
         endlocal 
        ) 
    ) 
    
    endlocal 
    exit /B 
    
    관련 문제