it-swarm.com.de

Gibt es eine systemdefinierte Umgebungsvariable für das Dokumentenverzeichnis?

Ich kenne die %USERPROFILE% systemdefinierte Umgebungsvariable unter Windows XP (und Vista und Windows 7). Gibt es eine vom System definierte Umgebungsvariable, die auf den Speicherort des Verzeichnisses "Eigene Dateien" verweist? Unter XP ist es standardmäßig %USERPROFILE%\My Documents und unter Windows 7 %USERPROFILE%\Documents. Ich wollte nur vermeiden, die Betriebssystemversion in einem Powershell-Skript testen zu müssen, wenn ich es vermeiden kann.

55

Auf meinem Standardinstallationssystem XP gibt es dafür keine Umgebungsvariable. Sie können alle Variablen mit dem Befehl "set" (keine Parameter) in der Befehlszeile auflisten. Also musst du wahrscheinlich einen Test machen.

Wenn Sie die Betriebssystemversion nicht testen möchten, können Sie einfach prüfen, ob "Documents" vorhanden ist. Wenn nicht, probieren Sie "My Documents" oder umgekehrt. Dies ist jedoch nicht perfekt, da s/o möglicherweise einen "Documents" -Ordner auf seinem XP - Computer hat. 

Übrigens: Mein System ist deutsch, der Ordner heißt "Dokumente". Möglicherweise müssen Sie dies berücksichtigen.

Der Pfad zu diesem Ordner wird in gespeichert

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

unter Personal. Sie benötigen jedoch einen Registrierungszugriff.

Quelle: Microsoft

30
msteiger

Für Powershell die folgenden Arbeiten:

[environment]::getfolderpath("mydocuments")

und magische Zeichenketten vermeiden

[Environment]::GetFolderPath([Environment+SpecialFolder]::MyDocuments)

Für .NET gilt Folgendes (dh nicht anwendbar in all windows-Anwendungen):

Wie in einer Antwort hervorgehoben wird, gibt es keine Umgebungsvariable, die auf Meine Dokumente verweist, aber es gibt Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) (C #) für .NET. 

Ich füge diese Antwort hinzu, da diese Frage auftaucht, wenn nach C #, Umgebungsvariablen und meinen Dokumenten gesucht wird. In Justins Antwort ist die Codezeile nicht enthalten :)

Die oben genannte Codezeile ist der bevorzugte Weg, um auf meine Dokumente in .NET zuzugreifen :)

Kopieren Sie diese Zeile für die Verwendung von C #.

var directoryNameOfMyDocuments = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

Beachten Sie, dass C # in MyDocuments ein großes D benötigt.

29
flindeberg

Es gibt keine eingebaute Umgebungsvariable, aber in PowerShell können Sie den Speicherort folgendermaßen finden:

[Environment]::GetFolderPath("mydocuments")

Sie können natürlich auch eine Umgebungsvariable erstellen mit:

$env:DOCUMENTS = [Environment]::GetFolderPath("mydocuments")
23
Hipponax43

(Nur zur Wiederholung der vorherigen Antworten) Es gibt keine Umgebungsvariable (WinXP) für das Verzeichnis "Eigene Dateien".

Sie können jedoch eine Variable mit dem folgenden Befehl festlegen:

Getestet unter Windows 7/8.1:

for /f "tokens=3* delims= " %a ^
in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') ^
do (set mydocuments=%a %b)

oder (ein Liner)

for /f "tokens=3* delims= " %a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do (set mydocuments=%a %b)

Was würde Ihnen dann eine %mydocuments% Variable geben:

C:\>echo mydocuments="%mydocuments%"

mydocuments="C:\pathto\My Documents"

(Verwendet jemand XP/Vista? Wenn ja, kann man das testen und uns wissen lassen, ob es funktioniert?)

14
Nick Grealy

Wenn Sie Folgendes eingeben:

set

In einer Eingabeaufforderung erhalten Sie eine Liste aller auf Ihrem System definierten Umgebungsvariablen.

Betrachtet man die auf meiner (Windows 7 Home Premium) definierten, scheint keiner von ihnen auf Meine Dokumente zu verweisen.

Zu Ihrer Information:

Die Funktion SHGetSpecialFolderPath kann verwendet werden, um den Pfad zum Verzeichnis "Eigene Dateien" abzurufen. Alternativ kann die Environment.GetFolderPath - Methode unter .Net verwendet werden

7
Justin
C:\Documents and Settings\mrabinovitch>set | grep -i document
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\myuser\Application Data
HOMEPATH=\Documents and Settings\myuser
USERPROFILE=C:\Documents and Settings\myuser

wie Sie sehen, gibt es keine solche Variable.

5
Moisei

Zusätzlich zu den Antworten, die auf registry , .NET und PowerShell basieren, können Sie auch WshSpecialFolders aus WSH verwenden. Hier ist ein in sich geschlossenes Kommando/Batch-Skript, das die folgenden Schritte demonstriert:

@echo off
call :script > "%temp%\%~n0.js" && cscript //nologo "%temp%\%~n0.js" %*
goto :EOF

:script
echo var specialFolders = WScript.CreateObject('WScript.Shell').SpecialFolders;
echo if (WScript.Arguments.length === 0) {
echo     for (var e = new Enumerator(specialFolders); !e.atEnd(); e.moveNext()) {
echo         WScript.Echo(e.item());
echo     }
echo } else {
echo     for (var e = new Enumerator(WScript.Arguments); !e.atEnd(); e.moveNext()) {
echo         WScript.Echo(specialFolders(e.item()));
echo     }
echo }
goto :EOF

Es gibt ein WSH-Skript in JScript aus und verwendet es, um einen oder mehrere Pfade für spezielle Ordner-Token abzurufen, die als Argumente angegeben werden. Angenommen, Sie speichern das obige Skript als Datei mit dem Namen specialf.cmd, lautet der Verwendungszweck für das Abrufen des Pfads zum Dokumentenverzeichnis des aktuellen Benutzers:

specialf MyDocuments

Hier ist eine weitere Verwendung, die alle speziellen Ordner-Token testet:

specialf ^
  AllUsersDesktop ^
  AllUsersStartMenu ^
  AllUsersPrograms ^
  AllUsersStartup ^
  Desktop ^
  Favorites ^
  Fonts ^
  MyDocuments ^
  NetHood ^
  PrintHood ^
  Programs ^
  Recent ^
  SendTo ^
  StartMenu ^
  Startup ^
  Templates

Sie können dies zum Erfassen in einer Umgebungsvariablen wie folgt verwenden:

for /f "delims=/" %p in ('specialf MyDocuments') do @set MYDOCS=%p
4
Atif Aziz

Einige Verwirrungen können auf die Verfügbarkeit von CSIDL/KNOWNFOLDERID-Werten im Vergleich zu den Befehls-Shell-Umgebungsvariablen zurückzuführen sein.

3
John Chacho

Verbesserte @NickGrealy-Antwort:

  1. reg query Ausgänge
 empty_line
reg_key_path
name type value 
  1. zwischen Wörtern in einem Registrierungswert kann eine beliebige Anzahl von Leerzeichen stehen, und die Zeichenfolge %a %b ist in diesem Fall nicht korrekt

Verwenden Sie die skip=2-Option zum Überspringen der ersten Zeilen und die tokens=2*-Option, um einen Registrierungswert an die %b-Variable zu übergeben:

for /f "skip=2 tokens=2*" %A in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do @set "UserDocs=%B"

oder für Skriptdateien:

for /f "skip=2 tokens=2*" %%A in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do set "UserDocs=%%B"

Aber unter Berücksichtigung des Registrierungswertes [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\!Do not use this registry key]

Basierend auf der Antwort von @AtifAziz:

for /f "tokens=*" %A in ('echo WScript.Echo^(^(new ActiveXObject^("WScript.Shell"^)^).SpecialFolders^("MyDocuments"^)^)^>%TEMP%\getdoc.js ^& cscript /nologo %TEMP%\getdoc.js ^& del /q %TEMP%\getdoc.js') do @set "UserDocs=%A"
2
Dmitry Sokolov

Für eine Batchdatei in Windows 7 (mindestens) benötigt Nick Gs Lösung eine geringfügige Änderung, um die benutzerdefinierte Variable UserDocuments festzulegen:

FOR /F "tokens=3* delims= " %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do (set UserDocuments=%%a)

Beachten Sie die einzigen Unterschiede sind,

  1. Verwenden Sie nur ein Leerzeichen für Delims
  2. %% a statt% a

Um die Zeile nicht zu sehen, aber um die Ergebnisse zu sehen, verwenden Sie:

@FOR /F "tokens=3* delims= " %%a in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do @(Set UserDocuments=%%a)
@Echo ~~~~~~~~ UserDocuments=%UserDocuments%

Danke, Nick G. Ihre Antwort hat mir viel beigebracht. Ich hoffe das hilft jemand anderem.

2
Rocky Scott

Getestet und arbeitet in Win XP, Vista, 8, 8.1 und 10 !! 

@echo off
    for /f "skip=2 tokens=2*" %%c in ('reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do @set "docs=%%d" && echo WIN XP - 10
    xcopy "C:\test.txt" "%docs%" /f /y
echo %docs%
pause
EXIT

Es existiert keine konstruktive Umgebungsvariable für Dokumente in Windows. Sie müssen einen benutzerdefinierten erstellen. Tun Sie dies, indem Sie hier gehen. Definieren Sie eine Umgebungsvariable namens MYDOCUMENTS, um auf den Standort zu verweisen, auf den Sie referenzieren möchten. Danach soll es sich um eine Umgebungsvariable handeln, auf die Sie mit% MYDOCUMENTS% verweisen.

1
Neal Bangia

aktualisieren Sie die Windows-Batchdatei (.bat) oder das Windows-Befehlsskript (.cmd).

@echo off
ver | find "XP" > nul
    if %ERRORLEVEL% == 0 SET DOCS=%USERPROFILE%\My Documents & echo WIN XP
    if %ERRORLEVEL% == 1 FOR /f "tokens=3" %%x IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do (set docs=%%x) & echo WIN Vista - 10

    xcopy "C:\test.txt" "%docs%" /f /y
echo %docs%
pause
EXIT

Hier ist die vollständige Liste der Benutzervariablen für alle Benutzer, die Windows ausführen.

Der reg-Abfrageteil des Codes findet diesen Wert und setzt ihn so, dass er sofort verwendet werden kann, und ermöglicht den anderen Codes, ihn dauerhaft für alle Benutzer festzulegen .. Der Ad-Registry-Teil des Codes ermöglicht es allen Benutzern. Der setx macht es so, dass Sie sich nicht abmelden und erneut anmelden müssen, um die Codes verwenden zu können.

Die aktuellen Benutzervariablen gelten nur für die Person, die diesen Code installiert hat.

@ECHO OFF
ECHO REG ALL USER variables

ECHO all user desktop
for /f "skip=2 tokens=3*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Desktop"') do @set "ALLDT=%%d"
 REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"  /v "ALLDT" /t  "REG_SZ"  /d "%ALLDT%" /f
 setx ALLDT "%ALLDT%"

 Echo all user's documents
  for /f "skip=2 tokens=3*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Documents"') do @set "ALLDOC=%%d"
   REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"  /v "ALLDOC" /t  "REG_SZ"  /d "%ALLDOC%" /f
   setx ALLDOC "%ALLDOC%"

 echo all user start menu
 for /f "skip=2 tokens=3*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Programs"') do    @set "ALLSM=%%d"
 REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"  /v "ALLSM" /t  "REG_SZ"  /d "%ALLSM%" /f 
 setx ALLSM "%ALLSM%"

  Echo all users startup
  for /f "skip=2 tokens=3*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Startup"') do @set "ALLSMSTU=%%d"
   REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"  /v "ALLSMSTU" /t  "REG_SZ"  /d "%ALLSMSTU%" /f 
   setx ALLSMSTU "%ALLSMSTU%"

  Echo all users music
  for /f "skip=2 tokens=2*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "CommonMusic"') do @set "ALLMU=%%d"
   REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"  /v "ALLMU" /t  "REG_SZ"  /d "%ALLMU%" /f 
   setx ALLMU "%ALLMU%"

  echo all users pictures
  for /f "skip=2 tokens=2*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "CommonPictures"') do @set "ALLPIC=%%d"
 REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"  /v "ALLPIC" /t  "REG_SZ"  /d "%ALLPIC%" /f 
 setx ALLPIC "%ALLPIC%"

 Echo all users videos
 for /f "skip=2 tokens=2*" %%c in ('reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "CommonVideo"') do @set "ALLVID=%%d"
 REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"  /v "ALLVID" /t  "REG_SZ"  /d "%ALLVID%" /f
 setx ALLVID "%ALLVID%"

 Echo set cerrent user variables 

 Echo current users desktop
 for /f "skip=2 tokens=2*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Desktop"') do @set "myDesktop=%%d"
   REG ADD "HKEY_CURRENT_USER\Environment"  /v "myDesktop" /t  "REG_SZ"  /d "%myDesktop%" /f 
setx myDesktop "%myDesktop%"

 Echo current users documents
 for /f "skip=2 tokens=2*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"') do @set "mydoc=%%d"
 REG ADD "HKEY_CURRENT_USER\Environment"  /v "mydoc" /t  "REG_SZ"  /d "%mydoc%" /f 
   setx mydoc "%mydoc%"

 Echo current user start menu
 for /f "skip=2 tokens=3*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Start Menu"') do @set "myStart=%%d"
   REG ADD "HKEY_CURRENT_USER\Environment"  /v "myStart" /t  "REG_SZ"  /d "%myStart%" /f 
   setx myStart "%myStart%"

  Echo current user startup
  for /f "skip=2 tokens=2*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Startup"') do @set "myStartup=%%d"
   REG ADD "HKEY_CURRENT_USER\Environment"  /v "myStartup" /t  "REG_SZ"  /d "%myStartup%" /f 
   setx myStartup "%myStartup%"

  Echo current users music
  for /f "skip=2 tokens=3*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Music"') do @set "myMU=%%d"
   REG ADD "HKEY_CURRENT_USER\Environment"  /v "myMU" /t  "REG_SZ"  /d "%myMU%" /f 
   setx myMU "%myMU%"

 Echo current users pictures
 for /f "skip=2 tokens=3*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Pictures"') do @set "myPIC=%%d"
  REG ADD "HKEY_CURRENT_USER\Environment"  /v "myPIC" /t  "REG_SZ"  /d "%myPIC%" /f 
  setx myPIC "%myPIC%"

 Echo current users video
 for /f "skip=2 tokens=3*" %%c in ('reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Video"') do @set "myVID=%%d"
 REG ADD "HKEY_CURRENT_USER\Environment"  /v "myVID" /t  "REG_SZ"  /d    "%myVID%" /f
   setx myVID "%myVID%"

 exit
0
user9150112

Windows-Stapeldatei (.bat) oder Windows-Befehlsskript (.cmd)

@echo off
ver | find "XP" > nul
    if %ERRORLEVEL% == 0 set Docs=%UserProfile%\My Documents & echo WIN XP
    if %ERRORLEVEL% == 1 set Docs=%UserProfile%\Documents & echo WIN Vista - 10

    xcopy  "C:\test.txt"  "%Docs%" /f /y 
pause
EXIT