gpt4 book ai didi

for-loop - 确定 token 数量 - BATCH

转载 作者:行者123 更新时间:2023-12-02 02:05:27 25 4
gpt4 key购买 nike

我目前正在通过 PowerShell 和 Batch 编写大量用户创建脚本。目前脚本有 95 行,是我用 Batch 写过的最大的脚本。

我希望脚本尽可能自动化,并计划将其提供给需要帮助创建大量用户的客户。为此,我有一个 21 行设置文件,我需要的变量之一是完整的域名(dsadd 需要这个)

问题是用户可能对此有任意数量的变量 - 从测试实验室中的两个到学校等地方的四个。到目前为止,我能够将标记分开,但是我需要将它们全部存储为变量,如 %%a、%%b,而不是将所有内容都存储为 %%a。 token 的数量将是动态的,因此我需要某种解决方案。像这样(是的,我知道这不是正确的语法):

if number of tokens=4 (
dsadd "cn=%%a,ou=%%b,dc=%DSuffix1%,dc=%DSuffix2%,dc=%DSuffix3%,dc=%Dsuffix4% )

在该行中,%%a 和 %%b 是稍后在从用户列表 excel 文件读取的代码中的另一个 for 循环中的变量。对于从两个 token 到四个 token 的任何东西,我都需要类似的东西。我不介意这个问题的解决方案是否不是纯粹的 BATCH,但这是我的首选。

谢谢。

编辑:这是我目前的 for 循环,它嵌套在另一个添加用户的更大的 for 循环中:

for /f "tokens=1,2,3,4 delims=." %%a in (Settings.ini) do (
set L=22
if !L!=22 set DSuffix1=%%a&& set DSuffix2=%%b&& set DSuffix3=%%c&& set DSuffix4=%%d
)

settings.ini 文件包含各种设置,例如 Exchange 服务器和用户主目录的路径。我需要解释的行是第 22 行,如下所示:

域名.SUFFIX(.SUFFIX.SUFFIX.SUFFIX)一个现实生活中的例子是:测试实验室.local要么测试实验室.ghamilton.local

对于测试实验室,设置应仅是域名和后缀,但对于学校或机构等其他机构,域后缀的数量最多可达四个。我想解释一下。

编辑:设法正确缩进代码,抱歉。

最佳答案

如果我没理解错的话,你有一个字符串,比如 domain.foo.bar.baz,你想把它改成 dc=domain,dc=foo,dc=bar ,dc=baz.

这个怎么样?

set domain=domain.foo.bar.baz
echo dc=%domain:.=,dc=%

这应该与此相呼应:

dc=domain,dc=foo,dc=bar,dc=baz

%domain:.=,dc=% 行正在扩展 %domain% 环境变量,但将所有 . 替换为 ,dc=。参见 http://ss64.com/nt/syntax-replace.html了解更多详情。

要在环境变量中进行字符串替换,您确实需要先将值放在环境变量中。这是一个将从 settings.ini 中读取第 22 行的脚本,结合上述技术:

setlocal enabledelayedexpansion
set L=0
for /f %%a in (settings.ini) do (
set /a L=!L! + 1
if !L! equ 22 (
set domain=%%a
echo dc=!domain:.=,dc=!
)
)

L 用于计算我们在哪一行。当我们到达第 22 行时,我们将环境变量设置为整行的值 (%%a),然后像上面那样进行字符串替换(但使用 ! 而不是比 % 来利用延迟扩展)。

当然不是echo,你会做类似的事情

dsadd "cn=%cn%,ou=%ou%,dc=!domain:.=,dc=!"

关于for-loop - 确定 token 数量 - BATCH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15305666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com