6
C:\Documents and Settings\Administrator\Desktop

I don't want to type the above each time to refer to a file on the desktop

1

4 Answers 4

10

You can use "%USERPROFILE%\Desktop" but I don't know from which version of Windows it is built in.

If your want the real folder where Desktop is located then use this code in the bach

for /F "skip=2 tokens=3* delims= " %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v Desktop') do set DesktopFolder="%%a"

This requires the reg.exe to be available (again, I don't know from which version of Window it is there) and it will set the DesktopFolder variable to the path of the Desktop.

Sign up to request clarification or add additional context in comments.

15 Comments

%USERPROFILE% is available already on XP (and probably earlier, too).
Note that this won't work for localized Windows versions where the Desktop folder has another name.
@user198729: You need to place quotes around %USERPROFILE%\Desktop, because the path contains spaces.
@user19.. does the file (the png) really exists, what are you trying to-do what is the full command?
@user198729: There is no direct environment variable for this... this is the limit of .bat/.cmd. Other scripting options (PowerShell and Windows Scripting Host for VBS and JS) offer a richer environment with objects/properties with far more details context.
|
7

The hybrid of Anders can be a bit more simple and readable, with the method described here hybrid scripting by Tom Lavedas.

@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);

1 Comment

WScript.Echo(WScript.CreateObject("WScript.Shell").SpecialFolders("Desktop")); is shorter, and looks more readable to me
2

If you absolutely need to have a batch file, but want to use the power of windows scripting host, you might want to try a WSH/batch hybrid

Batch/WSH hybrid:

@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

See ShellSpecialFolderConstants if you need to get the path of some other shell folder

5 Comments

@Johannes Rössel: Why not make your own answer? He asked for a batch file and that is what I'm trying to give him, with no external files.
Ah, sorry. Didn't read your link well enough. I merely tried to provide code since a single sentence is usually not very helpful. I'd spin the WSH stuff into a separate file anyway, though, since that's pretty much a mess to read. It also has no advantages over a separate file since it still depends on the WSH not being disabled through GP. Once your batch files get larger you probably want to go for readability. Note also that that ugly @name stuff only works if I have a comment here; it's not a general means of addressing anyone on this site.
@Johannes Rössel: How is 1 single file vs 2 separate files not an advantage? As far as @name goes, I know, it was the only option I had.
You can just as easily write a JS script into another file from your batch and call it. That way you can distribute a single file but get the benefit of not having to jump through syntactic hoops that make a single file a polyglot.
@Joey: In my opinion one file is better than two, even better than a temporary file, but you are right, this type of hybrid is cruel to read
1
set UserDesktop=%UserProfile%\Desktop

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

So now you can use the Local Variables

%UserDesktop% and %SharedDesktop%

SharedDesktop first case is for Vista and above the else is for XP

ps: before using these variables you should quote then "%UserDesktop%" because Username must have spaces, like ...\Bill Gates\... or \Documents and settings\...

1 Comment

It won't work if you moved the desktop to another location "Desktop > Properties > Location"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.