2010-04-07 3 views

Répondre

8

Vous pouvez utiliser "%USERPROFILE%\Desktop" mais je ne sais pas de quelle version de Windows, il est intégré.

Si votre voulez le réel dossier où Desktop est situé utilisez ce code dans le bach

pour/F "skip = 2 jetons = 3 * delims =" %% un dans ('reg query "HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User Shell Folders "/v de bureau) ne fixent DesktopFolder = "%% un"

Cela requiert l'reg.exe être disponible (encore une fois, je ne sais pas à partir de quelle version de Windows il est là) et il va définir la variable DesktopFolder sur le chemin du bureau.

+3

'% USERPROFILE%' est déjà disponible sous XP (et probablement plus tôt aussi). – Vlad

+0

Il dit ne peut pas trouver 'C: \ Documents' – user198729

+2

Notez que cela ne fonctionnera pas pour les versions localisées de Windows où le dossier' Desktop' a un autre nom. – Helen

1

Si vous avez absolument besoin d'avoir un fichier de commandes, mais souhaitez utiliser la puissance de Windows hôte de script, vous voudrez peut-être essayer un WSH/batch hybrid

Lot/WSH hybride:

@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 

Voir ShellSpecialFolderConstants Si vous avez besoin d'obtenir le chemin d'un autre dossier shell

+0

@Johannes Rössel: Pourquoi ne pas faire votre propre réponse? Il a demandé un fichier batch et c'est ce que j'essaie de lui donner, sans fichiers externes. – Anders

+0

Ah, désolé. Vous n'avez pas lu votre lien assez bien. J'ai simplement essayé de fournir du code, car une seule phrase n'est généralement pas très utile. De toute façon, je ferais tourner le contenu de WSH dans un fichier séparé, puisque c'est un gros problème à lire. Il n'a également aucun avantage sur un fichier séparé, car il dépend toujours que le WSH ne soit pas désactivé par GP. Une fois que vos fichiers de traitement par lots sont plus volumineux, vous devez probablement opter pour la lisibilité. Notez aussi que ce truc moche * @ nom * ne fonctionne que si j'ai un commentaire ici; Ce n'est pas un moyen général de s'adresser à quiconque sur ce site. – Joey

+0

@Johannes Rössel: Comment un seul fichier par rapport à deux fichiers distincts n'est-il pas un avantage? En ce qui concerne @name, je sais que c'était la seule option que j'avais. – Anders

6

L'hybride de Anders peut être un peu plus simple et lisible, avec la méthode décrite ici hybrid scripting par 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); 
+2

'WScript.Echo (WScript.CreateObject (" WScript.Shell ") .SpecialFolders ("Desktop")); 'est plus court, et me semble plus lisible –

0
set UserDesktop=%UserProfile%\Desktop 

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

Alors maintenant, vous pouvez utiliser les variables locales

%UserDesktop% et %SharedDesktop%

SharedDesktop Le premier cas est pour Vista et au-dessus du reste est pour XP

ps: avant d'utiliser ces variables que vous devez citer puis "% UserDesktop%" parce que le nom d'utilisateur doit avoir des espaces, comme ... \ Bill Gates \ ... ou \ Documents and sett ings \ ...

+0

Cela ne fonctionnera pas si vous avez déplacé le bureau à un autre endroit" Desktop> Properties> Location " –

Questions connexes