Изменения окружающей среды — когда и почему

#batch-file

Вопрос:

Учитывая описание Раймонда Чена и общепринятую точку зрения, мне любопытно узнать о некоторых наблюдениях:

Во-первых, если я быстр и запускаюсь set в пакетном окне при запуске (обновленная Windows 10 Home), то я получаю список переменных среды, которые я ожидаю установить.

Но оставьте это на некоторое время, и некоторые другие переменные будут созданы в дальнейших cmd экземплярах FPS_BROWSER_APP_PROFILE_STRING и FPS_BROWSER_USER_PROFILE_STRING , по — видимому, созданы браузером Edge.

У меня есть пакет инициализации, выполняемый по ссылке из каталога запуска. Этот пакет создает резервные копии некоторых важных каталогов и выполняет некоторые другие задачи. Одна из таких задач-удалить значки, которые DROPBOX раздражающе накладывает поверх значков zapiconoverlays :

 @ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

:: Get rid of dropbox-generated icon overlays
:: Provide a parameter to NOT restart explorer

SET "spaces=                                    "
(
ECHO Windows Registry Editor Version 5.00
ECHO/
FOR /L %%I IN (0,1,10) DO (
 FOR /L %%L IN (101,1,110) DO (
  SET /a iter=%%L
  FOR %%K IN (WOW6432NodeMicrosoftWindowsCurrentVersionExplorerShellIconOverlayIdentifiers
              MicrosoftWindowsCurrentVersionExplorerShellIconOverlayIdentifiers
             ) DO (
   ECHO [-HKEY_LOCAL_MACHINESOFTWARE%%K!spaces:~0,%%I!DropboxExt!iter:~-2!]
  )
 )
)
)>u:zapiconoverlays.REG

regedit /s u:zapiconoverlays.REG
del u:zapiconoverlays.REG

SET "spaces=%~1"
SET "iter="
IF NOT DEFINED spaces CALL restartexplorer
GOTO :eof
 

Который я обычно запускаю без параметра, поэтому restartexplorer выполняется:

 @ECHO OFF
taskkill /f /im explorer.exe
DEL %userprofile%AppDataLocalIconCache.db /a 2>nul
START explorer.exe
 

Любопытно, что переменные, которые были установлены в локальной среде при restartexplorer выполнении, затем передаются в другие cmd экземпляры. Например, я обрабатываю текущую дату/время в различные переменные среды. Если я запущу zapiconoverlays первым делом в пакете инициализации (после a setlocal ), то все будет работать так, как я ожидаю, но если я вызову zapiconoverlays вызов после установки переменных даты и времени, то переменные даты и времени будут доступны в дальнейших cmd экземплярах.

Я ищу подтверждение своим наблюдениям и, возможно, правило, которое можно применить.

Комментарии:

1.devblogs.microsoft.com/oldnewthing/20150915-00/?p=91591?

2. Когда программа запускается, она наследует текущую среду запуска программ.