如何在用户桌面目录中创建目录?

2024-03-23

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

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


The defaultWindows 桌面目录的定义为%USERPROFILE%\Desktop. USERPROFILE是预定义之一Windows环境变量 https://en.wikipedia.org/wiki/Environment_variable#Windows.

所以可以只使用:

md "%UserProfile%\Desktop\NewDirectory" 2>nul

这将创建一个名为NewDirectory只要用户没有更改桌面目录的默认值,就可以在用户的​​桌面上保存。命令md可以与完全限定的目录路径或相对目录路径一起使用。运行时的帮助输出命令提示符 https://www.howtogeek.com/235101/10-ways-to-open-the-command-prompt-in-windows-10/ md /?解释说md如果默认启用命令扩展,则将整个目录树创建到不存在的目录。另请参阅 Microsoft 文档命名文件、路径和名称空间 https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file.

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

  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
    该注册表项包含几个通常类型的字符串值REG_EXPAND_SZ它定义了为当前用户帐户定义的各种 shell 文件夹的路径。 shell 文件夹通常包含环境变量引用,例如%USERPROFILE%这就是类型的原因REG_EXPAND_SZ这意味着必须另外扩展字符串值才能获取 shell 文件夹的绝对路径。下面的批处理文件使用命令扩展环境变量引用CALL强制 Windows 命令处理器再解析一个命令行。
    例如,命令set "DesktopFolder=%%~K"执行后成为第一个for命令set "DesktopFolder=%USERPROFILE%\Desktop"。该命令被第二次解析cmd.exe类似的东西set "DesktopFolder=C:\Users\UserName\Desktop"因为命令call在真正执行命令之前set定义环境变量DesktopFolder使用从 Windows 注册表中读取的真实绝对文件夹名称。

  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
    此注册表项包含与上面的注册表项几乎相同的字符串值,但字符串值通常是类型REG_SZ。此注册表项用于向下兼容不支持其他注册表项以及环境变量引用的字符串值的应用程序。

shell 文件夹可能仅在两个注册表项之一中定义。例如,在 Windows XP 上,字符串值Administrative Tools, CD Burning, Fonts and Recent仅存在于注册表项下Shell Folders并且在密钥下不存在User Shell Folders.

信息添加者Compo https://stackoverflow.com/users/6738015/compo:

  1. Windows 本身默认使用 key 下定义的字符串值User Shell Folders并使用 key 下定义的字符串值Shell Folders仅当密钥下不存在时User Shell Folders.

  2. Windows 不会传播对 key 下的字符串值的修改User Shell Folders到 key 下具有相同名称的字符串值Shell Folders如果用户或程序直接在注册表中修改键下的字符串值User Shell Folders没有对键下具有相同名称的键进行适当的更改Shell Folders.
    所以如果是Desktop in User Shell Folders包含与以下不同的目录路径Desktop in Shell Folders,Windows 使用定义的路径Desktop in User Shell Folders.

用户可以自由地将任何文件夹更改为用户想要的任何内容。但用户必须注意更改现有两次注册表项中的字符串值。一些 shell 文件夹可以通过 Windows 图形用户界面或 Windows 应用程序(例如Downloads外壳文件夹。

另请参阅 Microsoft 文档已知文件夹 https://learn.microsoft.com/en-us/windows/win32/shell/known-folders and 已知文件夹ID https://learn.microsoft.com/en-us/windows/win32/shell/knownfolderid以及这些页面上引用的其他文档页面以及有关的文档申请登记 https://learn.microsoft.com/en-us/windows/win32/shell/app-registration.

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

@echo off
setlocal EnableExtensions DisableDelayedExpansion

set "DesktopFolder="
for /F "skip=2 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=2 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输出的查询结果不同于reg.exeWindows Vista 和更新的 Windows 版本。

请参阅 Microsoft 文章:使用命令重定向运算符 https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb490982(v=technet.10)的解释2>nul它重定向命令输出的错误消息MD在已经存在的目录上处理STDERR到设备NUL来抑制此错误消息。

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


有关处理字符串值的一些其他事实Desktop在按键下User Shell Folders and Shell Folders根据 Windows XP SP3 x86 的观察,在更改当前用户的注册表配置单元后始终重新启动 Windows:

  1. 字符串值的路径字符串的改变Desktop在钥匙下User Shell Folders例如来自%USERPROFILE%\Desktop to %USERPROFILE%\MyDesktop当然还有目录的创建%USERPROFILE%\MyDesktop将 Windows 桌面目录更改为自定义%USERPROFILE%\MyDesktop下次登录时以及字符串值Desktop下键Shell FoldersWindows 会在下次重新启动时进行调整。我没有测试过如果Desktop在键下Shell Folders也适用于仅进行注销和登录。两者都改变​​肯定是更好的选择Desktop同时使用字符串值将桌面目录永久更改为与默认目录不同的目录%USERPROFILE%\Desktop.

  2. 已删除或重命名的字符串值Desktop在钥匙下User Shell FoldersWindows 永远不会重新创建。所以这个字符串值可能不存在,如果Desktop在钥匙下User Shell Folders一旦被错误删除或重命名或注册表文件部分损坏,导致该字符串值不存在。正如下面的进一步测试所示,用户不会注意到该问题。

  3. 字符串值Desktop类型的REG_SZ下键Shell Folders始终设置为扩展路径%USERPROFILE%\Desktop如果字符串值Desktop类型的REG_EXPAND_SZ下键User Shell Folders根本不存在。 Windows 也会创建该目录%USERPROFILE%\Desktop如果在此错误处理情况下不存在,则自动

  4. 如果字符串值Desktop类型的REG_SZ下键Shell Folders and字符串值Desktop类型的REG_EXPAND_SZ下键User Shell Folders are both由用户或程序删除或重命名,Windows 在下次启动时创建字符串值Desktop类型的REG_SZ下键Shell Folders扩展路径为%USERPROFILE%\Desktop并创建目录(如果不存在)。字符串值Desktop类型的REG_EXPAND_SZ下键USer Shell Folders is not由 Windows 重新创建。

  5. 如果字符串值Desktop类型的REG_SZ下键Shell Folders存在与不同的扩展路径%USERPROFILE%\Desktop就像扩展路径一样%USERPROFILE%\MyDesktop和字符串值Desktop类型的REG_EXPAND_SZ在钥匙下User Shell Folders根本不退出,Windows忽略自定义路径Desktop类型的REG_SZ在钥匙下Shell Folders并将值设置为扩展路径%USERPROFILE%\Desktop并另外创建目录%USERPROFILE%\Desktop如果尚未存在。因此,如果没有使用字符串值定义自定义桌面目录,则无法使用自定义桌面目录Desktop类型的REG_EXPAND_SZ在钥匙下User Shell Folders.

我没有在 Windows 上使用较新版本进行有关处理的测试Desktop在按键下Shell Folders and User Shell Folders如果一个或两个字符串值不存在和/或具有相同或不同的目录路径和/或具有与默认值不同的目录路径。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在用户桌面目录中创建目录? 的相关文章

  • 如何在 Windows PowerShell 中使用 .bat 文件更改当前目录?

    我正在学习 Windows PowerShell 并且正在努力完成非常基本的任务 如何创建 bat 文件来更改当前目录 简单的 bat 文件cd mydir里面用得很好cmd exe 但它在 PowerShell 中不起作用 PS C Us
  • 用于在命令提示符下运行 .exe 的 Bat 文件

    我想创建一个 bat 文件 这样我只需单击它即可运行 svcutil exe language cs out generatedProxy cs config app config http localhost 8000 ServiceMo
  • 创建批处理文件以更改 Windows 7 中的电源选项

    有没有办法创建批处理文件并将其放在桌面上以更改 Windows 7 中的电源选项 具体来说 我将计算机设置为 30 分钟后休眠 现在我使用 Serve To Me Stream To Me 应用程序 我希望能够快速更改电源设置以允许连续操作
  • 如何使用批处理全屏打开窗口

    我之前用代码制作了一个批处理文件 start chrome exe profile directory Profile 1 http drive google com 它会以配置文件 1 用户的身份打开 google chrome 页面 D
  • 并排启动两个资源管理器窗口

    有没有办法使用批处理脚本并排 垂直平铺 启动两个资源管理器窗口 如果没有 我该如何使用 VBS 来做到这一点 我已经修改了上面的VBS脚本Hackoo完全按照OP的要求去做 脚本中的注释准确地解释了它将做什么 如果两个窗口未设置到正确位置
  • 批处理文件中的 URL 解码

    如何在批处理文件中 urldecode 以下字符串 我需要更改以下内容 http x3a x2f x2f www example com x2f some page x2f some x2f link html to this http w
  • 如何创建 .bat 文件来运行 C# 代码?

    我需要的是 我有一个 C 代码 我想构建它以便在桌面上创建一个 bat 文件 因此 当我从桌面运行这个 bat 文件时 它应该执行 C 代码 有没有办法在编译之前更改 c 项目的设置或属性 以便创建应运行此 c 代码的 bat 文件 将 C
  • 用于从多个目录复制和重命名文件的批处理文件

    我之前曾寻找过我的问题的答案 但到目前为止还没有具体的答案 看 使用xcopy将多个目录中的文件复制到一个目录 https stackoverflow com questions 585091 using xcopy to copy fil
  • 批处理中嵌套 IF ( IF ( ... ) ELSE( .. ) ) 语句

    我正在尝试写一个IF ELSE语句嵌套在另一个语句中IF陈述 这是我所拥有的 IF dirdive 1 IF DEFINED log ECHO DATE TIME gt gt log FOR R root1 G IN DO SET G G
  • 从 CMD 切换启用/禁用以太网适配器

    我正在尝试创建一个 bat文件 可以启用 禁用我的以太网适配器 但我对编码或 cmd 语法没有太多了解 我正在考虑使用netsh命令如下 IF Ethernet adapter is enabled GOTO disable ELSE GO
  • 在批处理脚本中发送 Windows 密钥

    我最近一直在使用SendKeys使用批处理脚本的函数 我已经了解如何在窗口中输入某些键 例如 Tab 键 SendKeys TAB 或者退格键 SendKeys BACKSPACE 但我一直尝试在不按Windows键的情况下输入它 不幸的是
  • 批处理:在特定程序中打开特定文件?

    当记事本是 txt 文件的默认程序时 如何告诉 Windows 在写字板中打开 C test test txt 接受的答案对我不起作用 我不确定这是因为我试图运行的程序 还是因为路径中有空格 即使我用引号引起来 或者其他原因 不管怎样 我可
  • Windows批处理支持异常处理吗?

    Windows批处理编程支持异常处理吗 如果没有 是否有任何方法可以有效地模拟批处理文件中的异常处理 我希望能够在批处理脚本中的任何 CALL 级别的任何位置 抛出异常 并重复弹出 CALL 堆栈 直到找到活动的 TRY 块 然后 CATC
  • 从 Windows 批处理文件中检测 ANSI 兼容控制台?

    Windows 10 控制台主机 conhost exe has 对 ANSI 转义序列的本机支持 https msdn microsoft com en us library windows desktop mt638032 aspx 旧
  • BATCH - 从 Windows 命令行获取显示分辨率并设置变量

    echo off set h wmic desktopmonitor get screenheight set w wmic desktopmonitor get screenwidth echo h echo w pause 而不是得到
  • 回显 unicode 字符

    我想通过运行bat 文件在cmd 中回显unicode 字符 我准备了一个简短的脚本 echo off SET message G p3 echo message pause 我怎样才能做到这一点 是否可以直接将这封信放入代码中 这样做 两
  • 如何通过批处理文件检查服务是否正在运行并启动它,如果它没有运行?

    我想编写一个执行以下操作的批处理文件 Check if a service is running 如果正在运行 请退出批处理 如果没有运行 启动该服务 到目前为止 我在谷歌上搜索的代码示例被证明不起作用 所以我决定不发布它们 启动服务是通过
  • 如何使用批处理脚本调用的curl 获取http post 请求的响应代码?

    我正在努力为从我们的工具之一发送 http post 请求提供支持 该工具基本上通过 http 请求执行作业 实现此目的的方法是该工具使用多个参数调用 RunScript bat 该脚本解析这些参数并在验证后发出curl post 请求 P
  • 已安装全局 NPM 包但未找到命令

    我已经全局安装了两个 npm 包 下载 https www npmjs com package download and 谜虚拟盒 https www npmjs com package enigmavirtualbox通过命令行 npm
  • 如何从 HTA 中启动批处理文件

    我有一个基本的 HTA 其中我尝试通过按钮启动批处理文件 但是当我尝试启动批处理文件时 它不会运行 当我按下按钮时 将启动命令提示符窗口 但不会运行脚本 这是代码的简单示例

随机推荐