tags:

views:

89

answers:

2
C:\Documents and Settings\Administrator\Desktop

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

+3  A: 

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.

Shay Erlichmen
`%USERPROFILE%` is available already on XP (and probably earlier, too).
Vlad
It says can't find `C:\Documents`
Note that this won't work for localized Windows versions where the `Desktop` folder has another name.
Helen
@user198729: You need to place quotes around `%USERPROFILE%\Desktop`, because the path contains spaces.
Helen
It says:`File or directory "C:\Documents and Settings\Administrator\Desktop\logo1w.png" is not found`
@user19.. does the file (the png) really exists, what are you trying to-do what is the full command?
Shay Erlichmen
@Shay: Also, the desktop folder isn't necessarily located inside %USERPROFILE% - it can be moved to an arbitrary location, even to another drive (see http://support.microsoft.com/kb/242557)
Helen
I tried both `ls "%USERPROFILE%\Desktop"\logo1w.png` and ls "%USERPROFILE%\Desktop\logo1w.png",the file exists on desktop.
@Helen,is there a **single** environment variable to locate desktop?
@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.
Richard
@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).
Anonymous
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 http://blogs.msdn.com/oldnewthing/archive/2003/11/03/55532.aspx
Anders
The file could also be on the All Users desktop.
aphoria
@Anders 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).
Shay Erlichmen
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.
Joey
A: 

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

Anders
@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.
Anders
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.
Joey
@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.
Anders
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