Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

batch-file

C:\Documents and Settings\Administrator\Desktop

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

like image 598
user198729 Avatar asked Apr 07 '10 09:04

user198729


4 Answers

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.

like image 79
Shay Erlichmen Avatar answered Nov 06 '22 04:11

Shay Erlichmen


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);
like image 28
jeb Avatar answered Nov 06 '22 03:11

jeb


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

like image 45
Anders Avatar answered Nov 06 '22 03:11

Anders


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\...

like image 30
Vitim.us Avatar answered Nov 06 '22 02:11

Vitim.us