批量修改PATH变量

时间:2018-12-07 16:22:48

标签: batch-file

我正在尝试搜索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语句中。当我用echo NOT FOUND替换SET PATH时,一切工作正常。但是,当我使用该行来设置path变量时,它返回“ \ Common这一次是意外的”。而%cd%不应包含“ common”,因为我是从台式机运行的

我以前运行过一次,它运行完美,一切正常,我重新启动,现在相同的代码无法达到相同的结果。

经过调试后,我发现问题实际上出在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 :(得分:0)

仅解决您的实际问题:

您的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"