Изменение переменной PATH из пакета - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь найти переменную пути Windows, чтобы узнать, существует ли в ней каталог.И если этого не произойдет, добавьте его.

Мой код выглядит следующим образом:

@echo off

SET VAR1=%path%

echo %VAR1% > text.txt

FOR /f "tokens=* delims=;" %%a IN (text.txt) DO (
echo.%%a|findstr /C:"app0" >nul 2>&1
    if not errorlevel 1 (
    echo Directory was Found
    ) else (
    SET PATH=%PATH%;%cd%\app0
    )
)

Проблема, которую я получаю, должна возникать в операторе else.Когда я заменяю SET PATH на echo NOT FOUND, все работает отлично.Тем не менее, когда я использую строку для установки переменной пути, она возвращает «\ Common был неожиданным в это время»;в то время как% cd% не должен включать «общие», так как я запускаю с рабочего стола

Я запускал его один раз, и он работал отлично, и все работало, я перешел на перезагрузку, и теперь тот же код не достигаеттот же результат.

После некоторой отладки я обнаружил, что проблема на самом деле в строке echo %VAR1% > text.txt

При включении эха отображается следующее:

echo C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Intel\Intel(R)
> Management Engine Components\iCLS\;C:\Program Files\Intel\Intel(R)
> Management Engine
> Components\iCLS\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program
> Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program
> Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files
> (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program
> Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program
> Files\Intel\WiFi\bin\;C:\Program Files\Common
> Files\Intel\WirelessCommon\;C:\Program Files (x86)\Common
> Files\Oracle\Java\javapath;C:\Program Files (x86)\Intel\Intel(R)
> Management Engine Components\iCLS\;C:\Program Files\Intel\Intel(R)
> Management Engine
> Components\iCLS\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program
> Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program
> Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files
> (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program
> Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program
> Files\Intel\WiFi\bin\;C:\Program Files\Common
> Files\Intel\WirelessCommon\;C:\Users\Bryan
> Douglas\AppData\Local\Microsoft\WindowsApps;C:\Program
> Files\Intel\WiFi\bin\;C:\Program Files\Common
> Files\Intel\WirelessCommon\;  1>text.txt
>     \Common was unexpected at this time.

Яделать что-то не так?

1 Ответ

0 голосов
/ 08 декабря 2018

Просто для решения вашей реальной проблемы:

Ваш PATH содержит закрывающие скобки, например:

C:\Program Files (x86)\Common Files\Oracle\Java\javapath
                     ^ here

Эта скобка закрывает ваш командный блок по вашей команде set:

SET PATH=%PATH%;%cd%\app0
           ^ inside here

Следующей вещью после ) является \Common Files\Oracle\Java\javapath, что интерпретируется как команда \Common с параметром Files\Oracle\Java\javapath.Следовательно, вы получите:

\ Common в это время было неожиданным.

Используйте предпочтительный синтаксис set "var=value" (обратите внимание на положение кавычек).Кавычки защищают ядовитые символы, такие как )&| ...

Таким образом, ваш код работает только с использованием предпочтительного синтаксиса set:

SET "PATH=%PATH%;%cd%\app0"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...