我正在创建批次以自动化初始设置。我注意到批处理文件输入与用户输入不同。当我使用批处理文件输入PIN,然后尝试手动输入时,它不匹配。我试过用空格输入,比如[space]1111,但它也不是有效的PIN。我知道有一种方法可以从另一个文件设置用户输入,但我希望将其全部放在一个批处理文件中。
(Echo 1111&Echo 1111&Echo 1111&Echo 1111)|ctconf
命令行输出:
C:\windows\system32>(Echo 1111&Echo 1111amp;Echo 111(|ctconf
正在初始化管理员令牌SO和管理员PIN(设备0,S/N:0000(:请输入新管理员SO pin:请确认新管理员SO pin:
请输入新的管理员密码:请确认新管理员密码:
echo命令应将PIN设置为1111。当我去登录时手动地,它不是正确的PIN。我认为echo正在添加空格或更改输入PIN。
C: \windows\system32>ctkmu l-s1
是否要查看私人(用户(对象[y/N]:y
请为插槽1:中的令牌输入用户PIN
标签=AdminToken(0000(标志=0x1001064d(RNG LOGIN-REQ USER-PIN-INIT CLOCK TOKEN-INIT双加密USER-LOW(
无法让用户登录(0xa0-PIN不正确(
ctkmu:列表操作失败0xa0-PIN错误
C: \windows\system32>
如果我重新开始处理并手动输入PIN 1111,那么它就工作了:
命令行输出:
C:\windows\system32>ctconf
正在初始化管理员令牌SO和管理员PIN(设备0,S/N:0000(:请输入新管理员SO pin:请确认新管理员SO pin:
请输入新的管理员密码:请确认新管理员密码:
C: \windows\system32>ctkmu l-s1
是否要查看私人(用户(对象[y/N]:y
请为插槽1:中的令牌输入用户PIN
Label=AdminToken(0000(Flags=0x1000064d(RNG LOGIN-REQ USER-PIN-INIT CLOCK TOKEN-INIT DUAL-CRYPTO(
公用和专用对象:插槽0-插槽HIMK-SECRET_KEY DES3适配器配置-适配器FwUpgradeCert-证书RSA(可信(
C: \windows\system32>
感谢您的建议。
|
读取stdin与从文件<
读取stdin是不同的行为。
我没有ctconf
可以测试,尽管我知道Python 3在管道方面也有类似的行为。因此,我将展示一些Python的例子,这些例子可能与ctconf
一起使用。
批处理文件:
@prompt $G$S
rem 1. No escaping.
(echo 1111&echo 1111&echo 1111&echo 1111) | py test1.py
rem 2. Escape ampersand and end with a dummy command.
(echo 1111^&echo 1111^&echo 1111^&echo 1111^&echo:>nul) | py test1.py
rem 3. Escape ampersand, newline and end with a dummy command.
( echo 1111^&^
echo 1111^&^
echo 1111^&^
echo 1111^&^
echo:>nul
) | py test1.py
pause
Python文件test1.py:
# Use these inputs to catch the stdin.
in1 = input('input1: ')
in2 = input('input2: ')
in3 = input('input3: ')
in4 = input('input4: ')
# Add a newline as inputs display no newlines.
print('n---')
# Repr is representation so the space can be seen.
print(repr(in1), repr(in2), repr(in3), repr(in4))
运行批处理文件,输出为:
> rem 1. No escaping. > (echo 1111 & echo 1111 & echo 1111 & echo 1111 ) | py test1.py input1: input2: input3: input4: --- '1111 ' '1111 ' '1111 ' '1111 ' > rem 2. Escape ampersand and end with a dummy command. > (echo 1111&echo 1111&echo 1111&echo 1111&echo: 1>nul ) | py test1.py input1: input2: input3: input4: --- '1111' '1111' '1111' '1111' > rem 3. Escape ampersand, newline and end with a dummy command. > (echo 1111& echo 1111& echo 1111& echo 1111& echo: 1>nul ) | py test1.py input1: input2: input3: input4: --- '1111' '1111' '1111' '1111' > pause Press any key to continue . . .
注意:输出中的单引号只是字符串值的表示,而不是值本身。
第一个例子没有进行转义,就像在OP中一样,输出有一个尾部空间,即'1111 '
。
第二个示例转义"与"符号,并使用一个伪命令来允许最后一个转义的"与"字符存在,否则将获得带有最后一个输出值的尾部空格。
第三个示例与第二个示例类似,但转义了换行符,因此可以逐行定位值以便于查看。
Python文件只是显示输出的一个示例,因此请关注Batch文件代码,了解如何使用管道|
消除传递的尾部空间。
这就是我用管道解决尾部空间的方法,也许还有其他更好的解决方案。