Board logo

标题: [文本处理] [已解决] 批处理如何自动产生随机字母填入文本? [打印本页]

作者: dennisle    时间: 2010-9-26 11:38     标题: [已解决] 批处理如何自动产生随机字母填入文本?

請教批處理高手,希望會的高手們不吝指教,謝謝您!!

如何讓批處理自動產生隨機字母填入 sysprep.ini 文本的某區段,
希望批處理自動產生隨機字母不超過 (15Byte),
產生的隨機字母填在 ComputerName=(填入區段)

sysprep.ini 文本內容如下:

;SetupMgrTag
[Data]
    AutoPartition=1
    MsDosInitiated="0"
    UnattendedInstall="Yes"

[Unattended]
    UnattendMode=FullUnattended
    OemSkipEula=Yes
    OemPreinstall=No
    TargetPath=\WINDOWS

[GuiUnattended]
    AdminPassword=*
    EncryptedAdminPassword=NO
    OEMSkipRegional=1
    TimeZone=220
    OemSkipWelcome=1

[UserData]
    ProductID=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    FullName="User"
    OrgName=""
    ComputerName=

[RegionalSettings]
    LanguageGroup=9
    Language=00000404

[Branding]
    BrandIEUsingUnattended=Yes

[Identification]
    JoinWorkgroup=WORKGROUP

[Networking]
    InstallDefaultComponents=Yes

[ 本帖最后由 dennisle 于 2010-9-29 13:07 编辑 ]
作者: dennisle    时间: 2010-9-27 16:41

沒人回應!!

請教批處理高手,這可有辦法呢?
作者: edmond    时间: 2010-9-27 18:51

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set t=abcdefghigklmnopqrstuvwxyz
  4. set /a m=!random!%%15
  5. set r=1
  6. :loop
  7. set /a n=!random!%%26
  8. set s!r!=!t:~%n%,1!
  9. if !r! lss !m! (set /a r+=1&goto loop)
  10. set ram=!s1!!s2!!s3!!s4!!s5!!s6!!s7!!s8!!s9!!s10!!s11!!s12!!s13!!s14!!s15!
  11. for /f "eol=~ tokens=1,2 delims==" %%a in ('findstr /n "^" sysprep.ini') do (
  12.      set p=%%a
  13.      set p=!p:*:=!
  14.      if not defined p (echo.>>tem.txt
  15.         ) else if "!p!"=="    ComputerName"  (echo,    ComputerName=!ram!>>tem.txt
  16.        ) else (echo !p!>>tem.txt)
  17. )
  18. del /q sysprep.ini
  19. ren tem.txt sysprep.ini
  20. pause
复制代码

作者: dennisle    时间: 2010-9-28 00:00

Edmond 大感謝您的回覆:

這方法會把文本裡的等號剔除掉,
其實等號後面是有數據的!!
很抱歉!沒有把文本表達清楚,
小弟把文本 PO 上,麻煩您了,
感激不盡!!

;SetupMgrTag
[Data]
    AutoPartition=1
    MsDosInitiated="0"
    UnattendedInstall="Yes"

[Unattended]
    UnattendMode=FullUnattended
    OemSkipEula=Yes
    OemPreinstall=No
    TargetPath=\WINDOWS

[GuiUnattended]
    AdminPassword=*
    EncryptedAdminPassword=NO
    OEMSkipRegional=1
    TimeZone=220
    OemSkipWelcome=1

[UserData]
    ProductID=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    FullName="User"
    OrgName=""
    ComputerName=

[RegionalSettings]
    LanguageGroup=9
    Language=00000404

[Branding]
    BrandIEUsingUnattended=Yes

[Identification]
    JoinWorkgroup=WORKGROUP

[Networking]
    InstallDefaultComponents=Yes
作者: netbenton    时间: 2010-9-28 05:08

把源文中的:
[UserData]
    ProductID=
    FullName=
    OrgName=
    ComputerName=(填入區段)

改成:
[UserData]
    ProductID=
    FullName=
    OrgName=
    ComputerName==!ram!
再读取文本,直接echo;%%a就可以了,不用判断
作者: edmond    时间: 2010-9-28 08:13

斑竹高明!
作者: edmond    时间: 2010-9-28 08:41

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set t=abcdefghigklmnopqrstuvwxyz
  4. set /a m=!random!%%15
  5. set r=1
  6. :loop
  7. set /a n=!random!%%26
  8. set s!r!=!t:~%n%,1!
  9. if !r! lss !m! (set /a r+=1&goto loop)
  10. set ram=!s1!!s2!!s3!!s4!!s5!!s6!!s7!!s8!!s9!!s10!!s11!!s12!!s13!!s14!!s15!
  11. for /f "eol=~ tokens=1,2 delims=#" %%a in ('findstr /n "^" sysprep.ini') do (
  12.      set p=%%a
  13.      set p=!p:*:=!
  14.      if not defined p (echo.>>tem.txt
  15.         ) else if "!p:~4,12!"=="ComputerName"  (echo,    ComputerName=!ram!>>tem.txt
  16.        ) else (echo !p!>>tem.txt)
  17. )
  18. del /q sysprep.ini
  19. ren tem.txt sysprep.ini
  20. pause
复制代码
这样也行,但5楼的方法简单准确!
作者: Batcher    时间: 2010-9-28 08:53     标题: 回复 4楼 的帖子

能否更新到顶楼?
作者: dennisle    时间: 2010-9-28 10:21

感謝你們回覆:
小弟受教了,不好意思再請教一個問題
依這文本如前面空格異動的話該調整哪呢?
因不同軟件所製作的回應檔空格會不一,
假如是前面沒有空格呢?

[UserData]
ProductID=XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
FullName="User"
OrgName=""
ComputerName=PC

小弟又該如何調整無空格! 謝謝您!!
for /f "eol=~ tokens=1,2 delims=#" %%a in ('findstr /n "^" sysprep.ini') do (
     set p=%%a
     set p=!p:*:=!
     if not defined p (echo.>>tem.txt
        ) else if "!p:~4,12!"=="ComputerName"  (echo,    ComputerName=!ram!>>tem.txt
       ) else (echo !p!>>tem.txt)
)
作者: edmond    时间: 2010-9-28 12:43

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set t=abcdefghigklmnopqrstuvwxyz
  4. set /a m=!random!%%15
  5. set r=1
  6. :loop
  7. set /a n=!random!%%26
  8. set s!r!=!t:~%n%,1!
  9. if !r! lss !m! (set /a r+=1&goto loop)
  10. set ram=!s1!!s2!!s3!!s4!!s5!!s6!!s7!!s8!!s9!!s10!!s11!!s12!!s13!!s14!!s15!
  11. for /f "eol=~ tokens=1,2 delims==" %%a in ('findstr /n "^" sysprep.ini') do (
  12.      set p=%%a
  13.      set j=%%b
  14.      set p=!p:*:=!
  15.      if not defined p (echo.>>tem.txt
  16.         ) else if "!p:~-12!"=="ComputerName"  (echo,!p!=!ram!>>tem.txt
  17.        ) else if defined j (echo !p!=!j!>>tem.txt) else (echo,!p!>>tem.txt)
  18. )
  19. del /q sysprep.ini
  20. ren tem.txt sysprep.ini
  21. pause
复制代码
自适应任意空格,下次LZ应该把问题一次描述清楚。
作者: dennisle    时间: 2010-9-28 17:59     标题: 批处理如何自动产生随机字母填入文本?

Edmond大:

非常感謝您不吝指教!!

[ 本帖最后由 dennisle 于 2010-9-29 13:06 编辑 ]




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2