Batch file 批处理文件转到下一个xcopy命令,如果windows;行政";用户名已更改

Batch file 批处理文件转到下一个xcopy命令,如果windows;行政";用户名已更改,batch-file,xcopy,Batch File,Xcopy,我希望能够只运行一个而不是多个xcopy实例,从usb驱动器到插入的计算机上的.\admin\desktop,但是可能有一些计算机的管理员用户名已更改为此人的姓名。windows的管理员用户帐户是否有通用的批处理namimg约定?如果是这样的话,我想使用它,不管它是什么,而不是列出每台计算机的每个人的用户名,猜测它可能是什么,而不是每次都看。 这是我到目前为止所做的,如果我知道“Admin”用户仍然被标记为“Admin”,那么它工作得很好 我也尝试了“所有用户”,但在某些情况下,该目录不存在,也

我希望能够只运行一个而不是多个xcopy实例,从usb驱动器到插入的计算机上的.\admin\desktop,但是可能有一些计算机的管理员用户名已更改为此人的姓名。windows的管理员用户帐户是否有通用的批处理namimg约定?如果是这样的话,我想使用它,不管它是什么,而不是列出每台计算机的每个人的用户名,猜测它可能是什么,而不是每次都看。 这是我到目前为止所做的,如果我知道“Admin”用户仍然被标记为“Admin”,那么它工作得很好

我也尝试了“所有用户”,但在某些情况下,该目录不存在,也无法工作。另外,如果计算机有多个用户,我不希望它出现在每个人的桌面上

任何帮助都将不胜感激


谢谢

所有用户都有SID标识符,并且本地管理员帐户始终以-500后缀结尾,因此您可以通过检查注册表上的SID来获取管理员用户名:

@Echo OFF

FOR /F "Tokens=*" %%@ IN ('Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" ^| FIND "-500"') DO (
    FOR /F "Tokens=2,*" %%A IN ('Reg Query "%%@" /v "ProfileImagePath" ^| FIND /V "%%@"') DO (
        Echo    Admin SID: %%~n@
        Echo Admin Folder: %%B
    )
)

Pause>NUL&Exit
输出:

   Admin SID: S-1-5-21-148789306-3749789949-2179752015-500
Admin Folder: C:\Users\Administrador
另一种方法是使用VBScript,您可以在批处理文件中使用它,并将管理员名称写入文本文件,然后接下来您将使用文本文件的内容设置一个变量。(我没有编写此函数):


PS:也许有人会发布其他解决方案,说列出组名是另一种选择。。。但是群名并不是一个通用的解决方案,因为它使用的是母语。

谢谢你的帖子。难道我不能将代码“C:\Documents and Settings\Admin”替换为%%B吗?我试过了,这台计算机的输出管理文件夹是C:\Users\administrator,但由于某些原因,它的工作原理不同。它在我的usb闪存驱动器(我的批处理所在的位置)上创建了一个%B文件夹,而不是C:\。因此,当我放置%%B并回显xcopy时,我得到:
xcopy“E:\M1k\u SWPCB**”“%B\Desktop\SWPCB\”/d/s/h/v/c/f/k/y以下是我尝试的:
@echo OFF FOR/f”Tokens=*“%%@IN('Reg Query“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList”^ FIND“-500“)DO(对于/f“Tokens=2,%%A IN('Reg Query“%@@@v@)“ProfileImagePath”^ | FIND/V“%%@”DO(Echo Admin SID:%%~n@Echo Admin Folder:%%%B))xcopy“%%~dp0M1k_SWPCB*”%%%B\Desktop\SWPCB\”/d/s/h/V/c/f/k/y Pause>NUL&ExitOk,我刚刚在DO()中将驱动器设置为等于%%B在我的代码中加入%drive%,它就成功了。非常感谢你的帖子。祝你一周愉快。你在for循环外使用for变量“%%B”,这就是为什么不起作用的原因,解决方案就是你发现的,将%%B设置为一个变量或在for循环内使用“Xcopy+%%B”。谢谢!
   Admin SID: S-1-5-21-148789306-3749789949-2179752015-500
Admin Folder: C:\Users\Administrador
Set objNetwork = CreateObject("Wscript.Network")
objComputerName = objNetwork.ComputerName

Set objwmi = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & objComputerName)
qry = "SELECT * FROM Win32_Account where Domain = '" & cstr(objComputerName) & "'"

For Each Admin In objwmi.ExecQuery(qry)
    If (Left(Admin.sid, 6) = "S-1-5-" And Right(Admin.sid,4) = "-500") Then MsgBox Admin.name)
Next