【问题标题】:Is there a short cut for desktop folder in Windows batch?Windows批处理中有桌面文件夹的快捷方式吗?
【发布时间】:2010-04-07 09:35:07
【问题描述】:
C:\Documents and Settings\Administrator\Desktop

我不想每次都输入上面的内容来引用桌面上的文件

【问题讨论】:

标签: batch-file


【解决方案1】:

您可以使用"%USERPROFILE%\Desktop",但我不知道它是从哪个版本的 Windows 中内置的。

如果您想要 Desktop 所在的 real 文件夹,请在 bach 中使用此代码

for /F "skip=2 tokens=3* delims=" %%a in ('注册查询 "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell 文件夹" /v Desktop') 设置 DesktopFolder="%%a"

这需要 reg.exe 可用(同样,我不知道它来自哪个版本的 Window),它会将 DesktopFolder 变量设置为桌面的路径。

【讨论】:

  • %USERPROFILE% 已经在 XP 上可用(而且可能更早)。
  • 请注意,这不适用于 Desktop 文件夹有另一个名称的本地化 Windows 版本。
  • @user198729:您需要在%USERPROFILE%\Desktop 周围加上引号,因为路径包含空格。
  • @user19.. 文件(png)真的存在吗,你想做什么?完整的命令是什么?
  • @user198729:这个没有直接的环境变量...这是.bat/.cmd的限制。其他脚本选项(用于 VBS 和 JS 的 PowerShell 和 Windows 脚本主机)提供了更丰富的环境,其中包含对象/属性以及更多详细的上下文。
【解决方案2】:

Anders 的混合体可以更简单易读,这里使用 Tom Lavedas 的 hybrid scripting 描述的方法。

@if (@X)==(@Y) @goto :Dummy @end/* Batch part

@echo off
SETLOCAL ENABLEEXTENSIONS
for /f "delims=" %%x in ('cscript //E:JScript //nologo "%~f0"') do set desk=%%x
echo desktop path is %desk%
goto :EOF

***** Now JScript begins *****/
WScript.Echo(WScript.CreateObject("Shell.Application").Namespace(16).Self.Path);

【讨论】:

  • WScript.Echo(WScript.CreateObject("WScript.Shell").SpecialFolders("Desktop")); 更短,对我来说更具可读性
【解决方案3】:

如果你绝对需要一个批处理文件,但又想使用 windows 脚本主机的强大功能,你可能想试试WSH/batch hybrid

批处理/WSH 混合:

@if (1==1) @if(1==0) @ELSE
@echo off&SETLOCAL ENABLEEXTENSIONS
for /f "delims=" %%x in ('cscript //E:JScript //nologo "%~f0"') do set desk=%%x
echo desktop path is %desk%
@goto :EOF
@end @ELSE
WScript.Echo(WScript.CreateObject("Shell.Application").Namespace(16).Self.Path);
@end

如果您需要获取其他shell文件夹的路径,请参阅ShellSpecialFolderConstants

【讨论】:

  • @Johannes Rössel:为什么不自己回答呢?他要了一个批处理文件,这就是我想要给他的,没有外部文件。
  • 啊,对不起。没有很好地阅读您的链接。我只是试图提供代码,因为单个句子通常不是很有帮助。不过,无论如何,我都会将 WSH 的东西放到一个单独的文件中,因为这几乎是一团糟。与单独的文件相比,它也没有任何优势,因为它仍然依赖于不通过 GP 禁用 WSH。一旦您的批处理文件变大,您可能想要提高可读性。另请注意,那些丑陋的 @name 东西只有在我在这里有评论时才有效;这不是在本网站上与任何人联系的通用方式。
  • @Johannes Rössel:1 个单个文件与 2 个单独文件相比如何不是优势?就@name 而言,我知道,这是我唯一的选择。
  • 您可以轻松地将 JS 脚本从批处理中写入另一个文件并调用它。这样,您可以分发单个文件,但不必跳过使单个文件成为多语言的语法圈。
  • @Joey:在我看来,一个文件比两个文件好,甚至比一个临时文件好,但你说得对,这种混合文件读起来很残忍
【解决方案4】:
set UserDesktop=%UserProfile%\Desktop

if exist %Public% (
    set SharedDesktop=%Public%\Desktop
) else (
    set SharedDesktop=%AllUsersProfile%\Desktop
)

所以现在你可以使用局部变量了

%UserDesktop%%SharedDesktop%

SharedDesktop 第一种情况适用于 Vista,其他情况适用于 XP

ps:在使用这些变量之前,您应该先引用“%UserDesktop%”,因为用户名必须有空格,例如 ...\Bill Gates\... 或 \Documents and settings\...

【讨论】:

  • 如果您将桌面移动到另一个位置“桌面 > 属性 > 位置”将不起作用
猜你喜欢
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
相关资源
最近更新 更多