มีการสนทนาที่นี่ที่คุณสามารถปรับให้เข้ากับวัตถุประสงค์ของคุณ
@Echo Off
Setlocal EnableDelayedExpansion
Set _RNDLength=8
Set _Alphanumeric=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
Set _Str=%_Alphanumeric%987654321
:_LenLoop
IF NOT "%_Str:~18%"=="" SET _Str=%_Str:~9%& SET /A _Len+=9& GOTO :_LenLoop
SET _tmp=%_Str:~9,1%
SET /A _Len=_Len+_tmp
Set _count=0
SET _RndAlphaNum=
:_loop
Set /a _count+=1
SET _RND=%Random%
Set /A _RND=_RND%%%_Len%
SET _RndAlphaNum=!_RndAlphaNum!!_Alphanumeric:~%_RND%,1!
If !_count! lss %_RNDLength% goto _loop
Echo Random string is !_RndAlphaNum!
TheOutcasteอธิบายข้างต้น:
ฉันได้ทำการแก้ไขเพื่อให้คุณสามารถระบุความยาวและเพิ่มหรือลบอักขระได้โดยไม่ต้องเปลี่ยนส่วนอื่น ๆ ของรหัส
ตัวอย่างเช่นคุณอาจไม่ต้องการใช้ทั้ง 0 และ O (ศูนย์และตัวพิมพ์ใหญ่ O) หรือ 1 และ l (หนึ่งและ L ตัวเล็ก)
คุณสามารถใช้เครื่องหมายวรรคตอนยกเว้นตัวอักษรเหล่านี้:
! % ^ & < >
คุณสามารถใช้^
และ%
แต่ต้องใส่ไว้ในตัวแปรสองเท่าหรือ_Alphanumeric
^^ %%
อย่างไรก็ตามหากคุณต้องการใช้ผลลัพธ์ ( _RndAlphaNum
) ในภายหลังในไฟล์แบทช์ (นอกเหนือจาก Echoing ไปที่หน้าจอ) พวกเขาอาจต้องจัดการเป็นพิเศษ
คุณสามารถใช้ช่องว่างได้ตราบใดที่ไม่ใช่อักขระตัวสุดท้ายในสตริง ถ้ามันเป็นอักขระตัวสุดท้ายในสตริงที่สร้างขึ้นมันจะไม่ถูกใช้ดังนั้นคุณจะมีเพียง 7 ตัวอักษร