variable restaurar por modificar entorno defecto crear windows environment-variables

restaurar - variables de entorno windows 10



¿Existe una variable de entorno definida por el sistema para el directorio de documentos? (16)

(Solo para reiterar las respuestas anteriores) No hay una variable de entorno proporcionada de fábrica (WinXP) para el directorio "Mis documentos".

Sin embargo, puede establecer una variable con el siguiente comando:

Probado en 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)

o (un trazador de líneas)

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)

Lo que le daría una variable %mydocuments% :

C:/>echo mydocuments="%mydocuments%" mydocuments="C:/pathto/My Documents"

(¿Alguien usa XP / Vista? En caso afirmativo, ¿puede probar esto y decirnos si funciona?)

Conozco la variable de entorno %USERPROFILE% system defined en Windows XP (y Vista y Windows 7). ¿Hay una variable de entorno definida por el sistema que apunte a la ubicación del directorio "Mis documentos"? En XP por defecto es %USERPROFILE%/My Documents y en Win 7 es %USERPROFILE%/Documents . Solo quería evitar tener que probar la versión del sistema operativo en un script de Powershell si puedo evitarlo.


Además de las respuestas basadas en el registry , .NET y PowerShell , también puede usar WshSpecialFolders de WSH . Aquí hay un script autónomo de comandos / lotes que demuestra cómo:

@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

Emite un script de WSH en JScript y lo usa para obtener una o más rutas para tokens de carpetas especiales proporcionados como argumentos. Suponiendo que guarde la secuencia de comandos anterior como un archivo llamado specialf.cmd , el uso para obtener la ruta al directorio de documentos del usuario actual sería:

specialf MyDocuments

Aquí hay otro uso que prueba todos los tokens de carpetas especiales:

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

Puede usar esto para capturar en una variable de entorno como esta:

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



Aquí está la lista completa de variables de usuario para todos los usuarios que ejecutan Windows.

La parte de la consulta de registro del código encontrará ese valor y lo configurará para que se pueda usar inmediatamente y permita que los demás códigos lo configuren de forma permanente para todos los usuarios. La porción de registro de anuncios del código lo habilitará para todos los usuarios. El setx lo hace para que no tenga que cerrar sesión y volver a iniciar sesión para poder usar los códigos.

Las variables de usuario actuales solo se aplican a la persona que instaló este código.

@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


En mi sistema XP de instalación predeterminada, no hay una variable de entorno para eso. Puede listar todas las variables con el comando "set" (sin parámetros) en la línea de comando. Entonces probablemente tengas que hacer una prueba.

Si no desea probar la versión del sistema operativo, simplemente puede verificar si existe "Documentos" y si no, intente con "Mis documentos" o viceversa. Sin embargo, esto no es perfecto, porque s / o podría tener una carpeta de "Documentos" en su máquina XP.

Por cierto: mi sistema es alemán, por lo que la carpeta se llama "Dokumente". Es posible que deba tener eso en cuenta.

La ruta a esa carpeta se almacena en

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

en Personal . Sin embargo, necesitas acceso al registro.

Fuente: Microsoft


En realidad, el %USERPROFILE%/My Documents debería funcionar en Windows 7. Es lo que uso.


La extensión de la respuesta de flindeberg a PowerShell se convierte en:

PS> [Environment]::GetFolderPath("mydocuments")


No existe por diseño una variable de entorno de documentos en Windows. Tienes que crear uno personalizado. Haz esto yendo here . Defina una variable de entorno llamada MYDOCUMENTS para hacer referencia a cualquier ubicación que necesite referenciar. A partir de entonces, será una variable de entorno a la que hará referencia por% MYDOCUMENTS%.


Para .NET, lo siguiente es verdadero (es decir, no aplicable en todas las aplicaciones de Windows):

Como señala una respuesta, no hay una variable de entorno que apunte a Mis documentos, pero hay Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) (C #) para .NET.

Estoy agregando esta respuesta ya que surge esta pregunta cuando busco en Google C #, variables de entorno y mis documentos y la respuesta de Justin no contiene la línea de código :)

Usar la línea de código mencionada anteriormente es la forma preferida de acceder a mis documentos en .NET :)

Copie y pegue esta fila para el uso de C #:

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

Tenga en cuenta que C # necesita una D mayúscula en MyDocuments.


Para un archivo por lotes en Windows 7 (al menos), la solución de Nick G necesita una ligera modificación para establecer los UserDocuments variables definidos por el usuario:

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)

Tenga en cuenta que las únicas diferencias son,

  1. Use solo un carácter de espacio para los delims
  2. %% a en vez de% a

Para evitar ver la línea, pero para ver los resultados, use:

@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%

Gracias Nick G. Tu respuesta me enseñó mucho. Espero que esto ayude a alguien más.


Probado y worrking en ganar XP, vista, 8, 8.1 y 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


Respuesta mejorada de @NickGrealy:

  1. salidas de reg query

empty_line reg_key_path name type value

  1. puede haber una cantidad arbitraria de ''caracteres espaciales'' entre palabras en un valor de registro, y la cadena %a %b no es correcta en este caso

Entonces, usando la opción skip=2 para omitir las primeras líneas y la opción tokens=2* para pasar un valor de registro al %b var:

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"

o para archivos de script:

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"

Pero teniendo en cuenta el valor de registro [HKEY_CURRENT_USER/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders/!Do not use this registry key]

Basado en la respuesta de @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"


Si escribe:

set

En un símbolo del sistema, obtendrá una lista de todas las variables de entorno definidas en su sistema.

Mirando los definidos en el mío (Windows 7 Home Premium) ninguno de ellos apunta hacia Mis Documentos.

FYI:

La función SHGetSpecialFolderPath se puede usar para obtener la ruta al directorio Mis documentos. Alternativamente, el método Environment.GetFolderPath se puede usar en .Net


Windows Batch File (.bat) o Windows Command Script (.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


actualizar Windows Batch File (.bat) o Windows Command Script (.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


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

como puedes ver, no hay tal vairable.