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文件夹
此注册表项包含多个字符串值,通常类型为
,用于定义指向为当前用户帐户定义的各种shell文件夹的路径。shell文件夹通常包含一个环境变量引用,这是类型REG\u EXPAND\u SZ
的原因,这意味着必须额外扩展字符串值,以获得shell文件夹的绝对路径。下面的批处理文件通过使用commandCALL来扩展环境变量,以强制Windows command processor再进行一次命令行解析REG\u EXPAND\u SZ
HKEY\u CURRENT\u USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell文件夹
此注册表项包含与上述注册表项几乎相同的字符串值,但字符串值的类型通常为
。此注册表项用于向下兼容不支持另一个注册表项的应用程序,该注册表项具有环境变量引用的字符串值REG_SZ
管理工具
,CD刻录
,字体
和最近的
仅存在于注册表项外壳文件夹
下,而不存在于注册表项用户外壳文件夹
下
由以下人员添加的信息:
用户外壳文件夹下定义的字符串值,并且仅当在键用户外壳文件夹下不存在时,才使用在键外壳文件夹下定义的字符串值
用户外壳文件夹下的字符串值,而没有对同名键进行适当更改,Windows不会将对键用户外壳文件夹下的字符串值的修改传播到键外壳文件夹下同名的字符串值在键Shell文件夹下
因此,如果User Shell Folders
中的Desktop
包含与Shell Folders
中的Desktop
不同的目录路径,Windows将使用User Shell Folders
中的Desktop
定义的路径
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