Batch file 如何在用户';谁的桌面目录?

Batch file 如何在用户';谁的桌面目录?,batch-file,Batch File,因此,我正在制作一个批处理文件,我将把它放在启动文件夹中。我需要在当前用户的桌面目录中创建一个目录。我只知道如何在当前目录中创建新目录 我知道如何创建目录的唯一方法是使用命令mkdir我将提供一种从注册表检索路径的方法: @For/F“EOL=HTokens=2*”%%A在(“^”“%\uuuuuu AppDir\uuuuuuuu%Reg.exe”查询中^ “HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell文件夹

因此,我正在制作一个批处理文件,我将把它放在启动文件夹中。我需要在当前用户的桌面目录中创建一个目录。我只知道如何在当前目录中创建新目录


我知道如何创建目录的唯一方法是使用命令
mkdir

我将提供一种从注册表检索路径的方法:

@For/F“EOL=HTokens=2*”%%A在(“^”“%\uuuuuu AppDir\uuuuuuuu%Reg.exe”查询中^
“HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell文件夹”^
/V Desktop^“2^>NUL”)Do@Call MD“%%B\New Directory”2>NUL

上述功能旨在在当前用户桌面上创建名为
新目录
(根据需要更改)的目录。

Windows桌面目录的默认是用
%USERPROFILE%\desktop
定义的<代码>用户配置文件是预定义的配置文件之一

因此,可以仅使用:

md "%UserProfile%\Desktop\NewDirectory" 2>nul
这将在用户的桌面上创建一个名为
NewDirectory
的目录,只要用户没有更改桌面目录的默认值。命令
md
可与完全限定目录路径或相对目录路径一起使用。在
md/?
中运行时的帮助输出说明,如果默认启用命令扩展,则
md
会将整个目录树创建到不存在的目录。有关详细信息,请参见Microsoft文档

但最好是从Windows注册表获取桌面目录路径,而不是简单地使用默认路径。有两个注册表项包含一个字符串值,其名称为
Desktop
,路径为用户的桌面目录:

  • HKEY\u CURRENT\u USER\Software\Microsoft\Windows\CurrentVersion\Explorer\USER Shell文件夹

    此注册表项包含多个字符串值,通常类型为
    REG\u EXPAND\u SZ
    ,用于定义指向为当前用户帐户定义的各种shell文件夹的路径。shell文件夹通常包含一个环境变量引用,这是类型
    REG\u EXPAND\u SZ
    的原因,这意味着必须额外扩展字符串值,以获得shell文件夹的绝对路径。下面的批处理文件通过使用commandCALL来扩展环境变量,以强制Windows command processor再进行一次命令行解析

  • HKEY\u CURRENT\u USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell文件夹

    此注册表项包含与上述注册表项几乎相同的字符串值,但字符串值的类型通常为
    REG_SZ
    。此注册表项用于向下兼容不支持另一个注册表项的应用程序,该注册表项具有环境变量引用的字符串值

shell文件夹可能仅在两个注册表项之一中定义。例如,在Windows XP上,字符串值
管理工具
CD刻录
字体
最近的
仅存在于注册表项
外壳文件夹
下,而不存在于注册表项
用户外壳文件夹

由以下人员添加的信息:

  • 默认情况下,Windows本身使用在键
    用户外壳文件夹下定义的字符串值,并且仅当在键
    用户外壳文件夹下不存在时,才使用在键
    外壳文件夹下定义的字符串值

  • 如果用户或程序在注册表中直接修改键
    用户外壳文件夹下的字符串值,而没有对同名键进行适当更改,Windows不会将对键
    用户外壳文件夹下的字符串值的修改传播到键
    外壳文件夹下同名的字符串值在键
    Shell文件夹下

    因此,如果
    User Shell Folders
    中的
    Desktop
    包含与
    Shell Folders
    中的
    Desktop
    不同的目录路径,Windows将使用
    User Shell Folders
    中的
    Desktop
    定义的路径

  • 用户可以自由地将任何文件夹更改为用户想要的任何文件夹。但是用户必须注意在现有的两个注册表项中更改字符串值两次。通过Windows图形用户界面上的选项或Windows应用程序(如
    Downloads
    shell文件夹),可以轻松修改某些shell文件夹

    另请参见和的Microsoft文档以及这些页面上引用的其他文档页面,以及关于的文档

    下面是一个批处理文件,它从Windows注册表中获取用户的桌面目录,尽可能安全

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    
    set "DesktopFolder="
    for /F "skip=1 tokens=1,2*" %%I in ('%SystemRoot%\System32\reg.exe QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop 2^>nul') do if /I "%%I" == "Desktop" if not "%%~K" == "" if "%%J" == "REG_SZ" (set "DesktopFolder=%%~K") else if "%%J" == "REG_EXPAND_SZ" call set "DesktopFolder=%%~K"
    if not defined DesktopFolder for /F "skip=1 tokens=1,2*" %%I in ('%SystemRoot%\System32\reg.exe QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Desktop 2^>nul') do if /I "%%I" == "Desktop" if not "%%~K" == "" if "%%J" == "REG_SZ" (set "DesktopFolder=%%~K") else if "%%J" == "REG_EXPAND_SZ" call set "DesktopFolder=%%~K"
    if not defined DesktopFolder set "DesktopFolder=\"
    if "%DesktopFolder:~-1%" == "\" set "DesktopFolder=%DesktopFolder:~0,-1%"
    if not defined DesktopFolder set "DesktopFolder=%UserProfile%\Desktop"
    
    md "%DesktopFolder%\NewDirectory" 2>nul
    
    endlocal
    
    此批处理文件甚至可以在Windows XP上工作,
    reg.exe
    在Windows XP上输出与Windows Vista和更新版本的
    reg.exe
    不同的查询结果

    有关
    2>nul
    的说明,请参阅Microsoft文章about。nul
    将已存在的目录上的命令MD输出的错误消息重定向到设备nul,以抑制此错误消息

    但是,用户的桌面目录应仅包含快捷方式文件(
    *.lnk
    文件)以及用户在桌面上创建的文件和目录。除用户桌面目录中的快捷方式文件或目录外,任何程序都不应创建其他文件。Microsoft为应用程序定义了其他几个shell文件夹,如应用程序的
    APPDATA
    (应用程序数据)或
    LOCALAPPDATA
    (本地应用程序数据)


    有关Windows在键
    用户外壳文件夹
    外壳文件夹
    下处理字符串值
    桌面
    的一些附加事实,如使用Windows XP SP3 x86时所观察到的,在创建后始终重新启动Windows