Batch file Windows批处理中是否有桌面文件夹的捷径?

Batch file Windows批处理中是否有桌面文件夹的捷径?,batch-file,Batch File,我不想每次都键入上面的内容来引用桌面上的文件您可以使用%USERPROFILE%\desktop”,但我不知道它是从哪个版本的Windows内置的 如果您想要桌面所在的real文件夹,请在bach中使用此代码 对于/F“跳过=2个令牌=3*delims=“%%a in('reg)查询 “HKEY\U当前用户\软件\ Microsoft\Windows\CurrentVersion\Explorer\USER Shell文件夹“/v桌面”)是否已设置 DesktopFolder=“%%a” 这需要

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

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

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

对于/F“跳过=2个令牌=3*delims=“%%a in('reg)查询 “HKEY\U当前用户\软件\ Microsoft\Windows\CurrentVersion\Explorer\USER Shell文件夹“/v桌面”)是否已设置 DesktopFolder=“%%a”


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

如果您确实需要批处理文件,但希望使用windows脚本主机的功能,您可能需要尝试

批处理/WSH混合:

C:\Documents and Settings\Administrator\Desktop

查看是否需要获取其他shell文件夹的路径

使用Tom Lavedas在这里描述的方法,Anders的混合版本可以更简单易读

@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
现在你可以使用局部变量了

%UserDesktop%
%SharedDesktop%

SharedDesktop第一个案例适用于Vista,高于其他案例适用于XP


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

%USERPROFILE%
已经在XP上可用(可能也更早)。请注意,这不适用于桌面文件夹有另一个名称的本地化Windows版本。@user198729:您需要在
%USERPROFILE%\Desktop
周围加引号,因为路径包含空格。@user19。。这个文件(png)真的存在吗,你想做什么?完整的命令是什么?@user198729:这个没有直接的环境变量。。。这是.bat/.cmd的限制。其他脚本选项(PowerShell和Windows scripting Host for VBS和JS)提供了一个更丰富的环境,其中的对象/属性具有更详细的上下文。@Johannes Rössel:为什么不自己回答呢?他要求一个批处理文件,这就是我试图给他的,没有外部文件。啊,对不起。你的链接读得不够好。我只是试图提供代码,因为一句话通常没有多大帮助。不过,我还是会将WSH的内容旋转到一个单独的文件中,因为读起来非常混乱。与单独的文件相比,它也没有任何优势,因为它仍然依赖于未通过GP禁用WSH。一旦批处理文件变得更大,您可能会希望具有可读性。还要注意的是,丑陋的@name东西只有在我有评论的情况下才起作用;这不是在这个网站上称呼任何人的一般方式。@Johannes Rössel:一个文件和两个单独的文件为什么不是优势?就@name而言,我知道,这是我唯一的选择。你可以很容易地将JS脚本从批处理中写入另一个文件并调用它。这样,您可以分发单个文件,但不必跳过使单个文件成为多语言文件的语法环。@Joey:在我看来,一个文件比两个好,甚至比临时文件更好,但您是对的,这种混合文件读起来很残酷
WScript.Echo(WScript.CreateObject(“WScript.Shell”).SpecialFolders(“桌面”)较短,对我来说更具可读性。如果将桌面移动到另一个位置“桌面>属性>位置”,则该代码将不起作用。该位置可能重复
@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);
set UserDesktop=%UserProfile%\Desktop

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