这是我的批处理文件中的命令setpath.bat
set workdir="%cd%"
timeout 30
set path="C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;"
timeout 30
每次我在 Windows 10 上的 cmd.exe 中运行此批处理时,都会收到此错误
E:\>setpath.bat
E:\>set workdir="E:\"
E:\>timeout 30
Waiting for 29 seconds, press a key to continue ...
E:\>set path="C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;"
E:\>timeout 30
'timeout' is not recognized as an internal or external command,
operable program or batch file.
我知道set
修改了当前shell(窗口)的环境值,并且更改立即可用,但它是暂时的;whilesetx
永久修改该值,这会影响所有未来的 shell,但不会修改已经运行的 shell 的环境。
我只想知道我是否可以在 Windows 10 上为环境值 %path% 赋值,以便我可以立即在 shell 中运行一些命令。
这是使用这些命令的另一个实验
echo %path%
set workdir="%cd%"
timeout 30
set path="C:\Windows\system32;"
echo %path%
timeout 30
C:\Windows\system32\timeout 30
这个输出
E:\>setpath.bat
E:\>echo E:\Miniconda3\condabin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;E:\Miniconda3;E:\Miniconda3\Scripts;E:\Miniconda3\Library\bin;C:\Users\AlbertD\AppData\Local\Microsoft\WindowsApps;e:\Program Files\JetBrains\PyCharm Community Edition 2020.3\bin
E:\Miniconda3\condabin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;E:\Miniconda3;E:\Miniconda3\Scripts;E:\Miniconda3\Library\bin;C:\Users\AlbertD\AppData\Local\Microsoft\WindowsApps;e:\Program Files\JetBrains\PyCharm Community Edition 2020.3\bin
E:\>set workdir="E:\"
E:\>timeout 30
Waiting for 30 seconds, press a key to continue ...
E:\>set path="C:\Windows\system32;"
E:\>echo "C:\Windows\system32;"
"C:\Windows\system32;"
E:\>timeout 30
'timeout' is not recognized as an internal or external command,
operable program or batch file.
E:\>C:\Windows\system32\timeout 30
Waiting for 29 seconds, press a key to continue ...
E:\>
这意味着即使 %path% 变量只有一个值,当前的 shell 也找不到 timeout.exe,但通过完整路径调用它效果很好。
我做了很多其他的实验,包括set path="%workdir%;%path%"
,它们都不起作用。
您的路径中有“”。不应添加它们。
尝试
另外,为什么不这样改变路径呢?
这可确保您的路径保留所有原始路径设置,并且只添加您想要添加的任何内容......
您可能正在考虑使用
setlocal
和endlocal
开始在批处理文件中本地化环境变量。本地化将继续,直到遇到匹配的 endlocal 命令或到达批处理文件的末尾。*
评论
如果您在脚本或批处理文件之外使用 setlocal,则它不起作用。 运行批处理文件时使用 setlocal 更改环境变量。运行 setlocal 后所做的环境更改对于批处理文件是本地的。当 Cmd.exe 程序遇到 endlocal 命令或到达批处理文件的末尾时,它会恢复以前的设置。
在批处理程序中可以有多个 setlocal 或 endlocal 命令(即嵌套命令)。
""
set "path=....strings;strings;..."
仅用于您的: