如何检查PATH环境变量中是否已存在目录?这是一个开始.但是,我已经设法使用下面的代码,它回显了%PATH%中的第一个目录.由于这是一个FOR循环,你会认为它将枚举%PATH%中的所有目录,但它只获得第一个目录.
有没有更好的方法呢?像%PATH%变量上运行的find或findstr之类的东西?我只想检查%PATH%目录列表中是否存在目录,以避免添加可能已存在的内容.
FOR /F "delims=;" %%P IN ("%PATH%") DO (
@ECHO %%~P
)
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个脚本,单击该脚本时会在Windows中的PATH环境变量中添加几个条目,而不是手动进行更改.我看到.bat文件在Windows上一直被用于各种原因,因此.bat脚本可以帮助我这样的东西吗?
我实际上需要从Internet上的某个位置下载zip,将其解压缩到指定位置,然后更新环境变量中的PATH.从来没有这样做,所以任何提示赞赏.
一般来说,在StackOverflow和网络上,有关如何将特定文件夹添加到用户的Windows 10 Path
环境变量的过时指南.
我认为对于具有分步说明和屏幕截图的新开发人员来说,完整的指南可能非常有用,可以帮助他们从命令提示符执行实用程序而无需完整路径,从而简化了操作.
我有一个批处理文件“file.bat”,它将使用以下命令调用安装程序:
msiexec.exe /i "%~dp0\installer.msi"
Run Code Online (Sandbox Code Playgroud)
安装程序将安装程序并更新 Path 变量。虽然这工作正常,但问题是当我尝试启动程序时找不到它,因为显然 PATH 变量没有更新。我尝试从内部重新启动批处理文件:
start cmd /c file.bat
Run Code Online (Sandbox Code Playgroud)
但它没有用。有没有办法刷新 PATH 变量或在新进程中重新启动批处理文件,以便检测新环境?
PS:手动重新启动批处理文件当然有效,但这不是我想要的。
谢谢。
windows path batch-file environment-variables windows-server-2012
我想创建一个批处理文件以将当前目录添加到我的系统变量PATH
( 不是我的用户变量)。
当我使用时:
SETX /M PATH "%CD%;%PATH%"
Run Code Online (Sandbox Code Playgroud)
它做了所需的事情。但是,我收到一条错误消息:
保存的数据被截断为 1024 个字符。
当我使用 GUI 检查系统变量时,我看到用户路径已添加到系统路径中。因此,系统路径有重复的条目。
我尝试将%PATH%
变量分配给临时变量并进行回显,但我也看到了重复的情况。
我在一些堆栈答案中看到,%PATH%
我们在批处理文件中使用的变量实际上是用户路径和系统路径的串联。
在命令提示符下,我尝试了:
REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH"
Run Code Online (Sandbox Code Playgroud)
但我不太清楚我们是否可以使用它来获取该 PATH 值并分配给另一个变量。
我正在阅读一篇关于ss64关于命令提示符中的环境变量的文章。
本文后面有一个表,其中列出了命令提示符中常见的环境变量。其中列出的一些变量被称为易失性(只读)。文章中的一句话指出:-
动态环境变量是只读的,并且每次扩展变量时都会进行计算。当所有变量都用 SET 列出时,这些变量将不会出现在列表中。不要尝试直接设置动态变量。
后两句话我明白了。但我无法理解第一个。
疑问:-
%userprofile%
是非易失性变量,解析为%SystemDrive%\Users\{username}
,%homepath%
是易失性变量,解析为Users\{Username}
。这两个命令非常相似(除了systemdrive
)。那为什么一个是易失性的,另一个是非易失性的呢?
变量动态的标准是什么?是什么使%appdata%
(只是一个例子)成为非易失性变量?
每次扩展变量时都会计算动态变量,这对于诸如此类的变量是有意义的,%CD% %DATE% %TIME% %RANDOM%
因为如果它们是非易失性的,它们就会失去其功能。但效果如何呢%homepath%
?
一些非易失性变量中含有某种动态成分。前任。%userprofile%
有%SystemDrive%
并且{username}
在它的路径中。那么这些变量怎么不是动态的呢?
我正在使用以下命令追加到Windows系统PATH变量的路径:
setx PATH "%PATH%;%ProgramFiles%\MySQL\MySQL Server 5.5\bin"
Run Code Online (Sandbox Code Playgroud)
它工作正常.
我的问题是:
如何将路径(在这种情况下为%ProgramFiles%\ MySQL\MySQL Server 5.5\bin)附加到系统PATH变量中,同时还检查它是否已经存在,如果没有,则不添加两次?
是否有批处理命令来搜索和替换环境变量PATH中的字符串?
例如,环境变量PATH的内容是:
C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\AccuRev\bin;C:\Python24
Run Code Online (Sandbox Code Playgroud)
我必须C:\Python24
在这个变量中搜索并需要替换它C:\Python27
.
我正在尝试将当前目录(从命令行)永久添加到 Windows 路径,但是我在实现这个时遇到了严重的问题。
我最初的尝试是:
set PATH=%PATH%;%cd%
Run Code Online (Sandbox Code Playgroud)
但是,这只适用于当前会话;只要我关闭命令行窗口,PATH
环境变量就会保留其先前的值。
接下来,我尝试:
setx PATH=%PATH%;%cd%
Run Code Online (Sandbox Code Playgroud)
根据我在此处找到的一些答案,这可能适用于 Windows 7 和 8,但在 Windows 10 中,该setx
命令具有三种工作方式:
Syntax 1:
SETX [/S system [/U [domain\]user [/P [password]]]] var value [/M]
Syntax 2:
SETX [/S system [/U [domain\]user [/P [password]]]] var /K regpath [/M]
Syntax 3:
SETX [/S system [/U [domain\]user [/P [password]]]]
/F file {var {/A x,y | /R x,y string}[/M] | /X} [/D delimiters]
Run Code Online (Sandbox Code Playgroud)
长话短说,我无法让它工作:
ERROR: Invalid syntax. Default option is not allowed more than …
Run Code Online (Sandbox Code Playgroud) 我有批处理文件,用于设置用户路径,并作为Visual Studio IDE构建步骤的一部分运行.
@ECHO OFF
@ECHO %PATH%
set COMSPEC = "%VCINSTALLDIR%\vcvarsall.bat" amd64
setx PATH "..\..\lib\libsndfile;..\..\lib\simulink"
@ECHO %PATH%
Run Code Online (Sandbox Code Playgroud)
当我构建项目,关闭VS,并重新打开它,并重建时,我将附加路径视为PATH
变量的一部分.但是,我看到在Windows环境中设置环境变量PATH
变量是在用户环境变量下创建的
..\..\lib\libsndfile;..\..\lib\simulink
Run Code Online (Sandbox Code Playgroud)
问题1:
为什么此路径也作为附加路径显示为系统环境变量的一部分?
在echo %PATH%
通过Visual Studio控制台执行时(当我第二次运行项目时)打印系统变量路径和我创建的新路径附加到它.
问题2:
我想修改我的批处理文件,以便它只PATH
在首次运行Visual Studio构建期间在用户设置中设置一次环境变量.如果用户变量PATH
在后续运行中已存在,则不应再次执行set命令以避免在系统变量中反复添加新路径.
任何想法如何实现这一目标?
batch-file ×8
windows ×6
path ×5
cmd ×1
command ×1
command-line ×1
replace ×1
search ×1
setx ×1