Is there a short cut for desktop folder in Windows batch?
Asked Answered
K

4

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

Kimberliekimberlin answered 7/4, 2010 at 9:35 Comment(1)
Possible duplicate of path of user desktop in batch filesScots
D
9

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.

Desirable answered 7/4, 2010 at 9:38 Comment(15)
%USERPROFILE% is available already on XP (and probably earlier, too).Illegitimacy
It says can't find C:\DocumentsKimberliekimberlin
Note that this won't work for localized Windows versions where the Desktop folder has another name.Acuminate
@user198729: You need to place quotes around %USERPROFILE%\Desktop, because the path contains spaces.Acuminate
It says:File or directory "C:\Documents and Settings\Administrator\Desktop\logo1w.png" is not foundKimberliekimberlin
@user19.. does the file (the png) really exists, what are you trying to-do what is the full command?Desirable
@Shay: Also, the desktop folder isn't necessarily located inside %USERPROFILE% - it can be moved to an arbitrary location, even to another drive (see support.microsoft.com/kb/242557)Acuminate
I tried both ls "%USERPROFILE%\Desktop"\logo1w.png and ls "%USERPROFILE%\Desktop\logo1w.png",the file exists on desktop.Kimberliekimberlin
@Helen,is there a single environment variable to locate desktop?Kimberliekimberlin
@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.Douma
@user198729: To determine whether the problem is in the file or the directory: go to %userprofile%\desktop in explorer, or type cd "%userprofile%\desktop" in the command console, running as the user which the batch file will be run as, and see if it takes you to the right place (ie, a folder with that file in it).Arun
XP is the first version that has reg.exe out of the box (Pre XP only had it in the reskit) As far as the shell key goes, everyone should read blogs.msdn.com/oldnewthing/archive/2003/11/03/55532.aspxInspire
The file could also be on the All Users desktop.Leathery
@Inspire typical, tell you don't use that but don't tell you how for example you suppose to get the value in a batch file (other than creating a console application that will do that).Desirable
Note that the registry key is also the wrong way to do it. You have to use the Known Folder API to get the path to such folders, otherwise the result might be wrong. And yes, you can't get that directly from a batch file.Dunsinane
N
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);
Nola answered 13/4, 2011 at 22:4 Comment(1)
WScript.Echo(WScript.CreateObject("WScript.Shell").SpecialFolders("Desktop")); is shorter, and looks more readable to meBeaverbrook
I
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

Inspire answered 7/4, 2010 at 13:10 Comment(5)
@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.Inspire
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.Dunsinane
@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.Inspire
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.Dunsinane
@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 readNola
W
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\...

Work answered 29/10, 2012 at 18:12 Comment(1)
It won't work if you moved the desktop to another location "Desktop > Properties > Location"Binkley

© 2022 - 2024 — McMap. All rights reserved.