【发布时间】:2010-04-07 09:35:07
【问题描述】:
C:\Documents and Settings\Administrator\Desktop
我不想每次都输入上面的内容来引用桌面上的文件
【问题讨论】:
标签: batch-file
C:\Documents and Settings\Administrator\Desktop
我不想每次都输入上面的内容来引用桌面上的文件
【问题讨论】:
标签: batch-file
您可以使用"%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 版本。
%USERPROFILE%\Desktop 周围加上引号,因为路径包含空格。
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")); 更短,对我来说更具可读性
如果你绝对需要一个批处理文件,但又想使用 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
【讨论】:
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\...
【讨论】: