[求助]脚本生成 INI 和 XML 文件
2023-3-18 2318

大家好。

我想创建一个带有一些自定义的 Windows 安装程序

1 - 我想知道一个生成已经包含配置的 .ini 文件的脚本

示例:使用我键入的名称创建一个新的 .ini 文件,其中包含

[建立]
[姓名]

2 - 我想知道一个与 unattend.xml 链接的脚本

示例:当我输入用户名、密码和组时
更改用户、密码和组 xml 文件
所以我可以使用我的自定义安装 Windows
例如,有 WinNTSetup

如果难以理解,请原谅我的翻译

奖励
收藏
点赞
分享
Keketoco00
最新回复 (57)
  • avatar image
    caocaofff 2023-3-18

    创建INI文件或者XML文件都可以使用PECMD的WRIT命令,例如:

    WRIT C:\setup.ini,+0,[setup]
    WRIT C:\setup.ini,+0,file=abc
    WRIT C:\setup.ini,+0,[name]
    WRIT C:\setup.ini,+0,username=123
    

    创建XML文件时,也是用一样的方法去逐行写入文本。

     

    PECMD提供了一个读取INI文件的方法文件:

    _SUB READINI // [-f filename[=%READINI_STORE%]]  [-ret UsrRetName] TAG NAME  [DEF_VAL]
       SET &I=1
       FIND $%~1=-f, TEAM CALC #&I=%&I%+2| SET &READINI_STORE=%~2
       MSTR &&V,&&Vi=<~%I%*>%*
       SET &RetName=
       FIND $%&&V%=-ret, TEAM CALC #&I=%&I%+2| SET RetName=%&Vi%
       FIND $%&READINI_STORE%=,EXIT _SUB //参数错误
       SET &V=
       MSTR &&TAG,&&NM,&&V=<~%&I%*>%*
       FIND $[ '%&&TAG%'='' | ''='%&&NM%' ], EXIT _SUB   //参数错误
       FIND $%&RetName%=, SET RetName=%&NM%
       STRL &len=%NM%=
       CALC #&&off=%&len%+1
       SET &fnd=0
       READ  %&READINI_STORE%,*,&&VS
       FORX *NL &&VS,&&Vi,
       {
           @FIND $%&Vi%=[%&TAG%], TEAM SET fnd=1| EXIT -
           @MSTR * &&c1=1,1,&Vi
           @FIND $%&&c1%=[,  TEAM SET fnd=0| EXIT -
           @MSTR * &&c1=1,%&len%,&Vi
           @IFEX #[ %&fnd%=1 & '%&&c1%'='%&NM%=' ],TEAM SET fnd=2| MSTR &V=%&off%,0,%&Vi%| EXIT FORX
       }
       ENVI-ret %&RetName%=%&&V%
    _END
    
    
    SET &V=error
    READINI -f A.INI -ret &&V   setup name  "(null)"
    MESS. [setup]:name=[%&&V%]
    
    SET &name=error
    READINI -f A.INI setup name  "(null)"
    MESS. [setup]:name=[%name%]
    
    
    SET &title=error
    @TEAM SET &READINI_STORE=A.INI
    READINI setup title  "(null)"
    MESS. [setup]:title=[%title%]
    
    SET &V=error
    READINI -ret &&V setup title  "(null)"
    MESS. [setup]:title=[%&&V%]
    
    

    希望能帮助到你😃

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    keketoco00 2023-3-18
    楼主   3
    caocaofff 创建INI文件或者XML文件都可以使用PECMD的WRIT命令,例如: WRIT C:\setup.ini,+0,[setup] WRIT C:\setup.ini,+0,file=abc WR ...

    非常感谢,对我帮助很大

    最后于 2023-3-19 被keketoco00编辑 ,原因:
    Keketoco00
  • avatar image
    keketoco00 2023-3-19
    楼主   4
    此楼层已删除
    Keketoco00
  • avatar image
    keketoco00 2023-3-20
    楼主   5
    caocaofff 创建INI文件或者XML文件都可以使用PECMD的WRIT命令,例如: WRIT C:\setup.ini,+0,[setup] WRIT C:\setup.ini,+0,file=abc WR ...

    有没有办法进入 EDIT1 并让它自动出现在 EDIT2 中?

     

    我知道如果我使用 ENVI @EDIT2=%EDIT1% 它会完成这个过程,但是为了让它工作我必须按 Enter

     

    我想知道是否有一种方法可以在不按 Enter 的情况下自动执行此操作

     

    例子:如果我在EDIT1中输入(HELLO),它会自动出现在EDIT2中,如果我删除我在EDIT1中写的内容,它会自动删除EDIT2

     

    并使其禁止输入特殊字符

    Keketoco00
  • avatar image
    caocaofff 2023-3-20
    keketoco00 有没有办法进入 EDIT1 并让它自动出现在 EDIT2 中? &nbsp; 我知道如果我使用 ENVI @EDIT2=%EDIT1% 它会完成这个过程,但是为了让它工作我必须按 Ente ...

    看了帮助文档,edit控件的事件触发方式只能是按回车键或双击,所以这个问题需要问问pecmd的开发者是否有解决的办法

    最后于 2023-3-20 被caocaofff编辑 ,原因:
    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    keketoco00 2023-3-20
    楼主   7

    我懂了

     

    是否可以按住回车键? 也许它像这个例子一样工作:SEND #13_

    Keketoco00
  • avatar image
    caocaofff 2023-3-20
    keketoco00 我懂了 是否可以按住回车键? 也许它像这个例子一样工作:SEND #13_

    你可能仍然需要通过其他方式来触发操作

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    爱心会员VIP会员
    527104427 2023-3-20
    keketoco00 有没有办法进入 EDIT1 并让它自动出现在 EDIT2 中? &nbsp; 我知道如果我使用 ENVI @EDIT2=%EDIT1% 它会完成这个过程,但是为了让它工作我必须按 Ente ...

    ENVI EN_CHANGE=0x0300

    CALL @WIN1

    _SUB WIN1,W354H309,

        edit Edit1,L10T10W275H70,,,

        edit Edit2,L10T82W275H70,,,

        ENVI @Edit1.ID=?;ID1

        ENVI @this.MSG=_COMMAND#%ID1%#%EN_CHANGE%::wp,lp, envi @Edit2=%Edit1%

    _END

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    keketoco00 2023-3-20
    楼主   10
    527104427 ENVI EN_CHANGE=0x0300 CALL @WIN1 _SUB WIN1,W354H309, edit Edit1,L10T10W275H70,,, edit Ed ...

    非常感谢 caocaofff

    这正是我想要的

    纸币 1000

    Keketoco00
  • avatar image
    爱心会员VIP会员
    keketoco00 非常感谢 caocaofff 这正是我想要的 纸币 1000

    哈哈哈,请问是人民币吗?

    顺便说一下,我可不是草草坛主哦

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    527104427 哈哈哈,请问是人民币吗? 顺便说一下,我可不是草草坛主哦

    哈哈哈,5大一出手就解决了👍

    改天加个打赏积分的功能

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    keketoco00 2023-3-23
    楼主   13
    caocaofff 哈哈哈,5大一出手就解决了👍 改天加个打赏积分的功能

    再看看我 caocaofff

     

    我还需要你的帮助一次

     

    1 - 我想将 index:name:windows 版本放入 LIST1

     

    例子:https://ibb.co/8XdJm67

     

     

    2 - 我需要使用 FILE 命令将 unattend.xml 发送到 \Panther\ 文件夹

     

    3 - 我希望磁盘卷出现在 LABE1 Volume: Name: MBR\UEFI: Windows Installation: How many GB is the disk

     

    例子:https://ibb.co/Jnt3DgX

     

     

    我试着自己做,但没有结果。

     

        所以我的帮助是你

    Keketoco00
  • avatar image
    keketoco00 再看看我 caocaofff 我还需要你的帮助一次 1 - 我想将 index:name:windows 版本放入 LIST1 例子:https://ibb.co/8XdJm67 ...

    1、先使用第三方命令获取WIM映像文件信息,例如:

    .\wimlib-imagex.exe info D:\install.wim

    image.webp

    然后对输出的内容进行筛选,加入LIST控件

    2、可以看FILE命令的示例

    FILE x:\unattend.xml=>x:\Panther

    3、也需要先获取磁盘分区相关信息,然后将信息使用ENVI命令输出到LABE控件

    =================

    以上具体的命令比较复杂😰,建议参考CGI源码

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    keketoco00 2023-3-24
    楼主   15

    非常感谢

     

    我将审查 CGI 源代码

     

    关于#2,我想将 unattend.xml 导入到我正在安装的 Windows 的 \Panther 文件夹中

     

    该示例包含来自 install(VHD).wcs 的代码

     

    _Sub add_auto

    找到#%chk_auto.check%=1,

    {

    发送。 mess3=%ext_mess2% \n 导入独立脚本 ...

                    发送 @ext_mess2=%mess3%

                    ifex "%Edit_auto%",

                    {

    ifex %1\windows\Panther\unattend.xml,文件-force -q %1\windows\Panther\unattend.xml >> %1\windows\Panther\unattend.xml.old

    file -force -q "%Edit_auto%" => %1\windows\Panther\unattend.xml

                    }

    }

    _结尾

     

    但我不知道如何让它适应我的

    Keketoco00
  • avatar image
    keketoco00 非常感谢 我将审查 CGI 源代码 关于#2,我想将 unattend.xml 导入到我正在安装的 Windows 的 \Panther 文件夹中 该示例包含来自 install(V ...

    这段代码的含义是:勾选chk_auto控件后,在释放WIM文件后,会对目标Windows\Panther目录下的unattend.xml先重命名,然后覆盖新的文件。

    你也可以添加一个勾选框,然后使用类似的代码

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    123 2023-4-15
    caocaofff 创建INI文件或者XML文件都可以使用PECMD的WRIT命令,例如: WRIT C:\setup.ini,+0,[setup] WRIT C:\setup.ini,+0,file=abc WR ...

    pecmd能按浏览器看到的格式显示xml文件吗

    123
  • avatar image
    123 pecmd能按浏览器看到的格式显示xml文件吗

    不能吧😟

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    123 2023-4-15

     

    sogou20230415_082413606607.gif

    123
  • avatar image
    keketoco00 2023-6-29
    楼主   20

    你好,caocaofff,你好吗?我尝试进行搜索,但没有成功,这些代码对于像我这样的业余爱好者来说很复杂,你能给我解释一下这个退出代码吗?我调用代码后 第三,如何发送到LIST和LABE?另一件事,关于 FILE 我想发送 .xml 文件以进行自动格式化,例如 WinNTSetup,事实上我正在尝试构建一个像 WinNTSetup 这样的程序  

    Keketoco00
  • avatar image
    keketoco00 2023-6-30
    楼主   21
    caocaofff 1、先使用第三方命令获取WIM映像文件信息,例如: .\wimlib-imagex.exe info D:\install.wim 然后对输出的内容进行筛选,加入LIST控件 2、可以看FI ...

    .

    Keketoco00
  • avatar image
    keketoco00 你好,caocaofff,你好吗?我尝试进行搜索,但没有成功,这些代码对于像我这样的业余爱好者来说很复杂,你能给我解释一下这个退出代码吗?我调用代码后 第三,如何发送到LIST和LABE?另一件事,关 ...

    1、如果你希望将某内容显示到LABE或者LIST控件,则应该先获取这个内容为变量形式,例如&&Text,然后将这个变量显示到指定的控件上

    //调用wimlib-imagex读取wim文件信息,当前实例表示读取d:\3\install.wim的第1卷,只读取前4行,赋值给PE变量&&text
    EXEC*4 &&text=d:\3\wimlib-imagex info d:\3\install.wim 1
    
    //读取最后一行,保存为变量&line
    READ  -,0,&line,%&text%
    
    //从变量&line中读取第2个值(按空格为分段)
    MSTR &name=<2>%&line%
    
    //此时&name的值就是第1卷的卷名,可以将这个值添加到LIST控件的下拉框中(假设LIST控件名是List1)
    ENVI @List1=+%&name%

     

    2、我没找到合适的第三方程序来操作xml文件(例如XMLStarlet),所以只能使用PECMD的WRIT命令对unattend.xml进行操作(重新写某行文本),例如:

    WRIT %_CD%\unattend.xml,7,<UILanguage>zh-CN</UILanguage>

     

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    keketoco00 2023-7-1
    楼主   23
    caocaofff 1、如果你希望将某内容显示到LABE或者LIST控件,则应该先获取这个内容为变量形式,例如&amp;&amp;Text,然后将这个变量显示到指定的控件上 //调用wimlib-ima ...

    https://ibb.co/bm7Trcs

     

    这是正确的方法吗?

     

    做1合1

     

    要获取磁盘信息,我应该使用diskpart吗?

    Keketoco00
  • avatar image
    keketoco00 https://ibb.co/bm7Trcs 这是正确的方法吗? 做1合1 要获取磁盘信息,我应该使用diskpart吗?

    很棒的代码!

    获取磁盘信息可以使用pecmd的disk和part命令

    官方QQ群:872611894(群密码:pecmd.net)
  • avatar image
    keketoco00 2023-7-2
    楼主   25
    caocaofff 很棒的代码! 获取磁盘信息可以使用pecmd的disk和part命令

    谢谢,我发送给您的此命令的问题之一是如何仅将 INDEX 发送到 Winlib Apply 命令,因为此命令列出了 INDEX 以及显示名称 我正在尝试解决这个问题,PART 和 DISK 是下一步 谢谢,我快到了,非常感激

    Keketoco00
返回