在批处理错误级别问题中使用 JumpLabel 的注册表项



我面临以下问题:在Windows AD中,每个第一次登录计算机的用户都会在其桌面上复制一些程序链接。因此,台式 PC 和笔记本电脑是 AD 的成员,台式机使用基于服务器的配置文件,而笔记本使用本地配置文件,因此有必要区分运行时脚本。

我的计划/脚本如下:

reg query "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionexplorerShell Folders" /v "Desktop" /f "R:ProfileDesktop"
if %ERRORLEVEL% EQU 0 goto Domain
if %ERRORLEVEL% EQU 1 goto Notebook
:Domain
ECHO off
xcopy "c:UserAppsDesktop-Verknuepfungen*.lnk" "R:ProfileDesktop*.lnk" /Y > nul 
exit
:Notebook
ECHO off
xcopy "c:UserAppsDesktop-Verknuepfungen*.lnk" "%USERPROFILE%Desktop*.lnk" /Y > nul 
exit

应检查 shell 文件夹桌面字符串是广告路径还是本地路径来决定:桌面还是笔记本。 不幸的是,在每种情况下,尽管它是一个笔记本,但错误级别 0 返回,脚本使用错误的跳转标签。通常,它应该返回本地路径错误级别 1。

也许有人可以帮忙?

非常感谢您的建议,

克里斯

在这里你有一个解决方案,应该可以解决你的问题。

reg query "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionexplorerShell Folders" /v "Desktop" | find /i "R:ProfileDesktop" && goto Domain
:Notebook
ECHO off
xcopy "c:UserAppsDesktop-Verknuepfungen*.lnk" "%USERPROFILE%Desktop*.lnk" /Y > nul 
exit
:Domain
ECHO off
xcopy "c:UserAppsDesktop-Verknuepfungen*.lnk" "R:ProfileDesktop*.lnk" /Y > nul 
exit

如果该注册表项存在,则其内容将发送到find。然后find /i将在输出中搜索,不区分大小写。如果找到字符串R:ProfileDesktop,则可以将成功与&&一起使用以触发goto Domain。只需要切换:Notebook:Domain,以便在错误(找不到搜索字符串)时,他会选择:Notebook.

安 迪

使用以下内置替代方法,您也可以解决此问题,但它不需要批处理文件。Microsoft试图消除对这种 skript 的需求

将 GPP(组策略首选项)与 WMI 筛选一起使用,并让它执行复制作业。您可以定义文件所在的路径以及应将其复制到的位置。如果您只需要一个固定的源/目标定义,或者可以使用环境变量,这应该是一个不错的选择。

微软对此的详细信息:

文件扩展名:
组策略包括文件首选项扩展名.
对于计算机或用户,此扩展允许您:

  • 将文件(或一个文件夹中的多个文件)复制到新位置,然后配置这些文件的属性。根据需要创建新的子文件夹。
  • 删除文件(或一个文件夹中的多个文件),并将其替换为源文件夹中的文件副本。
  • 修改文件(或一个文件夹中的多个文件)的属性。
  • 删除一个文件(或一个文件夹中的多个文件)。
  • 修改 的属性,替换或删除所有文件,使用 一个文件夹中的特定扩展名。
  • 修改特定文件夹中的所有文件
  • 的属性,替换或删除特定文件夹中的所有文件。

注意:
要配置文件夹而不是单个文件,请使用文件夹 外延。

您可以为任何 基于域的组策略对象 (GPO)。您可以通过使用组策略管理控制台编辑 GPO 来配置设置。编辑 GPO 时,可以在以下位置找到此首选项扩展:

计算机配置或用户配置
** └ 首选项
**** └ Windows 设置
****** └ 文件

来源:https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/dn789188(v=ws.11)#files-extension

您那里有更多的选择,包括一些不错的过滤选项。

最新更新