Как проверить, соответствует ли путь к папке пользователя USERs в скрипте BAT - PullRequest
0 голосов
/ 04 июня 2018

Я пишу пакетный скрипт Windows, который пытается определить, указывает ли значение пути (извлеченное из файла конфигурации приложения) на пользовательскую папку (например,% APPDATA%) или общую (например, C: \ ProgramData \ AppName)).

Долгосрочный способ сделать это состоит в том, чтобы попытаться проверить все возможные варианты установки, например, вот что я начал кодировать:

REM Get the value from the config file, entry is "set="

set locSettingsFile="%installFolder%\setting.data"
echo "Loc file %locSettingsFile%"

IF EXIST "%locSettingsFile%" (
   echo "Location settings file found at: %locSettingsFile%"

   REM Got the config file,now  get the set=value entry

   for /F "delims=" %%a in ('FINDSTR /R /C:"^set=" %locSettingsFile%') do set "setKeyVal=%%a"
   echo %setKeyVal%
   IF "%setKeyVal%"=="" (
      echo "Set location is not set in %locSettingsFile%"
   ) ELSE (

      REM Got the entry now extract the value from set=value

      for /f "tokens=2 delims==" %%a in ("%setKeyVal%") do set "setVal=%%a"
      echo "Set value is %setVal%"

      REM Now check if it points to a user specific folder

      IF /I %setVal:~0,9% == "%APPDATA%" IF /I %setVal:~1,8% == ":\USERS\"(

         REM Its user specific

      )
   )
) ELSE (
   echo echo "Location settings file does not exist: %locSettingsFile%"
)

Но,прежде чем я продолжу этот подход, я хотел бы спросить, есть ли простой однострочный, который может сказать мне, будет ли данный патч отображаться в пользовательскую папку.Помните также, что в некоторых системах папка пользователя может быть сетевым UNC-путем.

1 Ответ

0 голосов
/ 04 июня 2018

Исходя только из того, что точно из вашего вопроса:

Set "locSettingsFile=%installFolder%\setting.data"

Echo Loc file %locSettingsFile%

Set "setVal="
For /F "Tokens=1* Delims==" %%A In (
    'FindStr /IRC:"^set=" "%locSettingsFile%" 2^>Nul') Do Set "setVal=%%B"
If Not Defined setVal GoTo :EOF
Echo Set value is %setVal%

SetLocal EnableDelayedExpansion
If Not "!setVal:%AppData%=!"=="%setVal%" (
    Echo It is somewhere within the %%AppData%% location)
If Not "!setVal:%ProgramData%=!"=="%setVal%" (
    Echo It is somewhere within the %%ProgramData%% location)
EndLocal

Pause
...