2

我正在编写从服务器 2008 到服务器 2008 R2 的用户迁移脚本。我已经编写了大部分脚本,但是我在检索用户注册表导出的 SID 时遇到了困难。到目前为止,我有:

for /f "tokens=1" %%B IN (D:\users\$userprofile%\desktop\user.txt) do SET userx=%%B
echo %userx%
for /f "skip=2 tokens=2 delims=," %%A in  ('WMIC useraccount WHERE name='%userx%' get 
sid /format:csv') DO SET usersid=%%A
echo %usersid%

我目前正在测试这个部分,所以 user.txt 只包含我的名字,但 .txt 稍后将填充要迁移的用户。目前代码返回

dgibbons - Invalid alias verb.

WMIC 命令工作得很好。对无效别名动词错误的搜索都指向 name = 后面的空格(如 name='%userx%')。删除变量(将 WMIC cmd 留在 for 循环中)并插入我的用户名仍然返回相同的错误。我也尝试过使用双引号、单引号和无引号,每个都返回相同的错误。似乎问题是for循环在用户名之前创建了一个空格;无论如何,这就是我的看法。任何人都知道如何使代码工作?

4

1 回答 1

1
@echo off

for /f "skip=2 tokens=2 delims=," %%A in  ('"WMIC useraccount WHERE name='%username%' get sid /format:csv"') DO (
    SET usersid=%%A
)
echo %usersid%

The problem is in = sign which is a standard delimiter and in this case acts as space.The most convenient way to fix this according to me is using double quotes inside the single ones. Also can be escaped with ^= , but makes code a little bit unreadable.

于 2014-10-21T22:32:27.843 回答