2016-07-09 41 views
0

我有一個列表大洲的txt文件名,命名爲conts.txt:如何在CMD批處理文件隨機列表

africa 
america 
asia 
australia 
europe 

如何創建一個批處理文件,在其創建新的txt文件或重新創建conts.txt文件,文件中的大洲名稱隨機順序。

謝謝,我的英文不好

編輯遺憾:更正和道歉Liturgist

我有批處理腳本,與列表中我的訂單大洲的名字它會創建一個文件,TXT:

@echo off 
set list=africa america asia australia europe 
(for %%a in (%list%) do (
echo %%a 
))>conts.txt 

而且隨着我的基本示例腳本,如何創建隨機順序列表名稱

+1

Stackoverflow不是代碼編寫服務。這裏的方法是,你發佈你寫的代碼並描述它不符合需求。這裏的人們迴應建議改變代碼,以便它能按需要工作。你可能會得到一些倒票。你的英語很好。 – lit

回答

2

您可以創建一個隨機數的第二列表,然後進行排序基於關閉隨機數表:

@echo off 

setlocal enabledelayedexpansion 

set list=africa america asia australia europe 

rem Output the list first 
(for %%a in (%list%) do (
rem Add a number to each line to sort by 
set num=00000!random! 
set num=!num:~-5! 
echo !num!:%%a 
))>conts_.txt 

rem Run through the sorted file and output the second part 
(for /f "usebackq tokens=2 delims=:" %%a in (`sort Conts_.txt`) do (
echo %%a 
)) > conts.txt 

rem Delete the temp file 
del Conts_.txt 
+0

Anon Coward,你的批處理腳本工作得很好。 –

+0

謝謝Anon Coward,你的批處理腳本工作得很好。現在我只是修改腳本,我在一個文件txt中有幾十個或幾百個城市名稱,按從A到Z的順序輸入。接下來基於該城市名稱文件,我將創建具有隨機順序城市名稱的新txt文件 –

2

你可以使用一個for /L循環來循環1次迭代的每個列表項。在該循環中,選擇1到列表中的大陸數量之間的隨機數。調用函數返回與該隨機索引對應的大陸,並從列表中刪除該大陸。循環保留了剩餘列表項的數量。這減輕了編寫中間臨時文本文件的需要。

@echo off 
setlocal enabledelayedexpansion 

set "list=africa america asia australia europe" 

>continents.txt (
    for /L %%I in (5,-1,1) do (
     set /a idx = !random! * %%I/32767 + 2 
     call :getItem !idx! !list! 
     echo !return! 
    ) 
) 

rem // end main runtime 
goto :EOF 

:getItem <idx> <list> 
call set "return=%%~%~1" 
set "list=!list:%return%=!" 
goto :EOF 

注:for /L %%I in (5,-1,1)數5,4,3,2,1。 !random! * %%I/32767選擇一個介於0和%%I之間的隨機數減1.添加兩個將結果與:getItem函數對齊,該函數爲隨機數保留其第一個參數。只要列表以少於9個元素開始,這將工作。

相關問題