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
Algunas confusiones pueden deberse a la disponibilidad de los valores de CSIDL / KNOWNFOLDERID frente a las variables de entorno del shell de comando.
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,
- Use solo un carácter de espacio para los delims
- %% 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:
- salidas de
reg query
empty_line reg_key_path name type value
- 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.