2015-09-09 185 views
0

我想看看我不能使用批處理腳本(基本上是爲了獲得樂趣)製作隨機名稱生成器。這個想法是產生一個批處理文件,該批處理文件創建可發音名稱而不是隨機文本字符串批處理腳本 - 如何寫入文本文件的單行

雖然我可以很容易地做出一個簡單的系統,從預製列表中選擇一個隨機的名字,這很無聊。我想要做的是有一個系統,它選擇一個可變的音節字符串並將它們串成一個名字。

即通過作品:

set /a roll=%random%%%100+1 
if %roll% leq 100 set syllable=ah 
if %roll% leq 95 set syllable=roh 

等的檢查,看看是否計數等於一定數量的結束,有一點,如果沒有廣告1 TOT他計數和環回爲另一個音節滾動。音節的數量通過類似的修改%隨機%選擇,範圍從2到8.

不幸的是,我被困在讓該循環的多次使用成爲單個變量。我認爲,你可以使用type命令輸入文本,從文本文件的批處理文件,所以我想要做的是找出一種方法,使

echo %syllable% >> name.txt 

結果,其中具有所有它是一個文本文件一行中沒有空格的條目,而不是每行一個條目。

我還希望有人向我展示如何使用set命令使變量等於文本文件的內容。我認爲這將是:

set name=< name.txt 

但是,這可能會導致更多的變量是「< name.txt」 ......

+0

可能將您的變量設置爲文件名是最好的。然後,您可以簡單地使用代碼從該變量中指定的文件中提取文本。相反,您應該考慮使用[tag:powershell]來執行此操作。更豐富的編程環境,並且更難以合作。 – David

+0

不幸的是,我不知道如何使用powershell。或者其他任何編程語言。此外,如果我可以在批處理中完成這項工作,我可以將此位添加到我爲文件夾中的文件重命名的程序中,因此每個文件都有可讀的名稱而不是「Gh17haM」。 我寧願解決這個單一的問題,而不是學習一種全新的編程語言。 –

+0

這是否有幫助:http://stackoverflow.com/questions/134001/how-can-i-load-the-contents-of-a-text-file-into-a-batch-file-variable其中一個答案說'set/p VAR1 = <測試。txt' –

回答

0

我省略了@ECHO OFF上故意的第一行。請運行它並檢查輸出。這看起來像你想要完成的事情嗎?

SETLOCAL ENABLEDELAYEDEXPANSION 
SET /A ROLL=%RANDOM% %% 100 

FOR /L %%i IN (1,1,10) DO (
    SET /A ROLL=!RANDOM! %% 100 

    echo ROLL is now !ROLL! 

    IF !ROLL! LEQ 100 SET NEWSYLL=ah 
    IF !ROLL! LEQ 50 SET NEWSYLL=roh 

    SET SYLLABLE=!SYLLABLE!!NEWSYLL! 

    echo SYLLABLE is now !SYLLABLE! 
) 

ECHO %SYLLABLE%>olfile.txt 
EXIT /B 0 
0

在代碼中,首先生成在1和100之間的隨機數,然後選擇第一個音節如果數爲100和96(?)之間,第二音節如果數量是95之間(及90?)等這種方法很麻煩。生成1和音節數之間的隨機數然後直接得到一個就簡單多了。

下面的程序使用數組直接得到每個隨機音節;有關批處理文件中陣列管理的詳細說明,請參閱Arrays, linked lists and other data structures in cmd.exe (batch) script。每個音節都使用Delayed Expansion加入到一個變量中。

@echo off 
setlocal EnableDelayedExpansion 

rem Define the syllable array 
set N=0 
for %%a in (ah1 roh1 ah2 roh2 etc) do (
    set /A N+=1 
    set "syllable[!N!]=%%a" 
) 

rem Get a random number of syllables (from 2 to 8) 
set /A len=%random% %% 7 + 2 

rem Generate the name 
set "name=" 
for /L %%i in (1,1,%len%) do (
    set /A num=!random! %% N + 1 
    for %%n in (!num!) do set "name=!name!!syllable[%%n]!" 
) 

echo Name: "%name%" 
相關問題