【批处理DOS-CMD命令-汇总和小结】-环境变量、路径变量、搜索文件位置相关指令——set、path、where,cmd命令的路径参数中有空格怎么办

一、打印帮助相关信息——set /?

C:\Users\Administrator>set /?
显示、设置或删除 cmd.exe 环境变量。

SET [variable=[string]]

  variable  指定环境变量名。
  string    指定要指派给变量的一系列字符串。

要显示当前环境变量,键入不带参数的 SET。

如果命令扩展被启用,SET 会如下改变:

可仅用一个变量激活 SET 命令,等号或值不显示所有前缀匹配
SET 命令已使用的名称的所有变量的值。例如:

    SET P

会显示所有以字母 P 打头的变量

如果在当前环境中找不到该变量名称,SET 命令将把 ERRORLEVEL
设置成 1。

SET 命令不允许变量名含有等号。

在 SET 命令中添加了两个新命令行开关:

    SET /A expression
    SET /P variable=[promptString]

请按任意键继续. . .

二、显示环境变量

2.1 显示全部环境变量——set

2.2 显示指定环境变量——set %name%

显示指定Windows环境变量:set %name%或echo %name%。注意name的前后都要加百分号%。

C:\Users\Administrator>echo %PATH%
C:\CUDA_win10\CUDA11.1\cuda1\bin;C:\CUDA_win10\CUDA11.1\cuda1\libnvvp;D:\Program Files\ffmpeg-4.4-essentials_build\ffmpeg-4.4-essentials_build\bin;D:\ProgramData\Anaconda3;D:\ProgramData\Anaconda3\Library\mingw-w64\bin;D:\ProgramData\Anaconda3\Library\usr\bin;D:\ProgramData\Anaconda3\Library\bin;D:\ProgramData\Anaconda3\Scripts;D:\Program Files\Python\Python38\Scripts\;D:\Program Files\Python\Python38\;D:\Program Files\python\venv38\py-cv-learning\Scripts;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;D:\Program Files\MATLAB2017b\runtime\win64;D:\Program Files\MATLAB2017b\bin;C:\Program Files\dotnet\;D:\texlive\2021\bin\win32;D:\Users\Administrator\AppData\Local\SumatraPDF;D:\Program Files\Git\cmd;C:\Program Files\NVIDIA Corporation\NVSMI;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\NVIDIA Corporation\Nsight Compute 2022.1.1\;D:\Program Files\python\python37\Scripts\;D:\Program Files\python\python37\;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;;D:\Program Files\JetBrains\PyCharm Community Edition 2021.3.1\bin;;D:\Users\Administrator\AppData\Local\Programs\Microsoft VS Code\bin

C:\Users\Administrator>set %PATH%
环境变量 C:\CUDA_win10\CUDA11.1\cuda1\bin;C:\CUDA_win10\CUDA11.1\cuda1\libnvvp;D:\Program Files\ffmpeg-4.4-essentials_build\ffmpeg-4.4-essentials_build\bin;D:\ProgramData\Anaconda3;D:\ProgramData\Anaconda3\Library\mingw-w64\bin;D:\ProgramData\Anaconda3\Library\usr\bin;D:\ProgramData\Anaconda3\Library\bin;D:\ProgramData\Anaconda3\Scripts;D:\Program Files\Python\Python38\Scripts\;D:\Program Files\Python\Python38\;D:\Program Files\python\venv38\py-cv-learning\Scripts;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;D:\Program Files\MATLAB2017b\runtime\win64;D:\Program Files\MATLAB2017b\bin;C:\Program Files\dotnet\;D:\texlive\2021\bin\win32;D:\Users\Administrator\AppData\Local\SumatraPDF;D:\Program Files\Git\cmd;C:\Program Files\NVIDIA Corporation\NVSMI;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\NVIDIA Corporation\Nsight Compute 2022.1.1\;D:\Program Files\python\python37\Scripts\;D:\Program Files\python\python37\;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;;D:\Program Files\JetBrains\PyCharm Community Edition 2021.3.1\bin;;D:\Users\Administrator\AppData\Local\Programs\Microsoft VS Code\bin 没有定义

 在Linux系统中,要想显示所有或指定变量,需要用到export、env、echo指令。

  • 显示所有linux环境变量:export或env
  • 显示/查看指定linux环境变量:export name或echo name

三、新建环境变量——set name=xxx

3.1 新建Windows环境变量——set name=constant

新建Windows环境变量(仅在当前窗口有效):set name=constant。在cmd窗口中用set指令创建的变量,只能在当前窗口中使用,也即再重新打开一个cmd窗口时是不存在这个变量的。

3.2 表达式赋值环境变量——参数/a

表达式结果作为环境变量的值:【set /a name=expression】,也即在上面的基础上加一个参数/a。

之所以需要加参数/a,是因为如果不加,就会将value部分识别成纯字符串传入变量name。

 加了参数/a后,如下图所示,表达式才被运算至变量。

3.3 手动输入环境变量——set /p name=hint

人工手动输入的值传入环境变量:【set /p name=提示信息】 ,同上,如果不加参数/p,就会导致提示信息被当做纯字符串被传入变量name。

上面这张图,我误使用了重定向符号>(如果不懂,往后看到2.10就知道了),导致生成了下面的文件。

四、清除指定环境变量——set %name%=

清除指定环境变量:【set %name%=】,等于号后面无任何值。

五、path搜索路径管理命令——Path

5.1 打印path命令帮助信息——path /?

C:\Users\Administrator>path /?
为可执行文件显示或设置一个搜索路径。

PATH [[drive:]path[;...][;%PATH%]
PATH ;

键入 PATH ; 清除所有搜索路径设置并指示 cmd.exe 只在当前
目录中搜索。
键入 PATH 但不加参数,显示当前路径。
将 %PATH% 包括在新的路径设置中会将旧路径附加到新设置。

C:\Users\Administrator>

5.2 打印所有path搜索路径——path

5.3 清空所有path搜索路径——path ;

执行【path ;】后,再打印所有搜索路径,发现为空(null)。

同理,这里也只是在当前cmd窗口中清空,不代表磁盘中存储的path搜索路径被更改了。

一旦清空,cmd在搜索程序或命令时,只会在当前目录搜索。

因此,清空命令可以起到操纵搜索顺序的作用。 

5.4 补充path搜索路径

在5.3小节我们把所有的搜索路径全删了,现在我们尝试加一条进去。

可以执行命令【Path new_path %PATH%】,new_path为包含完整的驱动器和文件夹的绝对路径名,而%PATH%表示将新建路径附着在原有路径上。

注意%Path%区分大小写,不能用%path%。

同理,添加的路径也是临时有效。 

六、搜索程序/文件的位置或搜索优先级——where

6.1 打印Where命令帮助信息——where /?

直接在cmd命令行窗口输入【where】命令或者输入【where /?】然后回车,就会显示所有与where有关的帮助信息。

6.2 不带参数基本用法——where pattern

讲解where命令的各种参数之前,先不带参数讲解,渐进式学习+深入浅出。

6.2.1 单个不带通配符——仅文件名

where命令可以用来显示某一个可执行程序的路径,比如输入where cmd回车,就会输出C:\Windows\System32\cmd.exe,再比如输入where help回车,就会输出help.exe的路径。

输出路径在上的,优先级更高,也即执行指令时更优先执行处于最顶上面的路径中的文件。

本人曾经在pycharm的terminal中打开powershell环境,然后输入几次where都没弹出新信息,后来估计是shell中没这个命令,因此一定要确保是在cmd中运行该命令。

6.3.2 支持通配符——*、?

(1)通配符*用来代替多个任意字符

例如执行命令【where py*】,不仅会把python.exe搜出来,也会把pylupdate、pycc这种文件搜出来。

(2)通配符?用来代替一个任意字符

例如执行命令【where pyth?n】,也可以搜出python.exe程序出来。

6.3.3 支持批量搜索——where pattern1 pattern2

执行命令【where *bat *exe】,输出结果如下图所示,一大堆bat文件和exe文件都被搜出来了。

命令中排在偏左边的pattern搜索优先级更高,因此输出的结果是先bat文件、后exe文件。 

上面只用2个pattern,实际可以是n个,哈哈哈是不是很富足? 

6.3 不显示搜索文件列表——参数/Q

这个参数是我见过最没用的参数,因为带上后,输出不了任何东西,唯一能反映出来的信息是errorlevel,后面还要用echo打印出来。

执行命令【where /Q python】,发现这时候的where程序就是“高冷派”(开启了安静模式,quiet),跟他说话不鸟你,嗐!

不甘心,我看看能不能重定向到日志文件中,于是我又执行命令 【where /Q python>log.txt】。情况如下图

最后,正当我彻底绝望时,脑海中突然忆起往事——where命令也有错误回馈机制,在帮助信息里提到过这一点。

如果搜索成功,此工具返回错误级别 0; 如果不成功,返回 1; 如果失败或发生错误,返回 2。

当我故意执行命令【where /Q pytho123141】时,我知道它搜不出来,也就是不成功情况的错误级别1。

 

当我故意执行命令【where /Q python】时,我知道它搜得到,也就是成功情况的错误级别0。

错误级别数值越高,当然也就越来越错、越“错”越勇啦。

因此,这个/Q参数也不全无用。

当在bat脚本文件中编写dos命令时,或许会用到这个。

因为不需要输出搜索结果时,仅仅需要知道是否能搜到时,然后根据是否能搜到来决定后续程序的执行方向,就可以用这个参数。

6.4 递归搜索指定目录下的文件——参数/R或/r

因为涉及到路径空格问题,所以在这里遇到一些小错误,难以解决。

不过当路径上没有空格时,执行都挺顺利的!

6.4.1 路径中没空格,一切“安好”

执行命令【where /r C:\Users\Administrator\ python】

6.4.2 路径上有空格,相对路径加引号也“好”

相对路径就是正常的,不管引号起在路径的局部还是路径的全部。

执行命令【where /r "Program Files"\python\Python38 python】

 执行命令【where /r "Program Files\python\Python38" python】

6.4.3 路径有空格,绝对路径加局部引号“不好”

执行命令 【where /r D:\"Program Files"\python\Python38 python】

6.4.4 路径有空格,绝对路径加全局引号“很好”

执行命令 【where /r "D:\Program Files\python\Python38" python】


 

6.4.5 路径有空格,文件夹映射成磁盘也“很好”

文件夹映射成虚拟磁盘,执行命令【subst w: "D:\Program Files"】,创建了一个虚拟磁盘w。

再执行命令【where /r W:\python\Python38 python】 ,搜索成功。

6.4.6 路径有空格,空格部分目录以变量代入“不好”

先设置目录变量(执行命令set dir1=Program Files),然后再将变量代入路径中(执行命令where /r D:\%dir1%\python\Python38 python),也失败了。

6.4.7 路径有空格,用波浪线加数字也“不好”

执行命令【where /r d:\Progra~1\python\Python38 python】

讲真这个波浪线加数字是什么意思我到现在还不明白,不过网上有很多文章都在建议用这个方法来避免路径空格问题出错。

七、如何调整搜索路径优先级?where命令输出路径顺序

路径输出的先后顺序代表优先级顺序,也代表cmd命令行窗口搜索指令/程序的顺序,因此只要学会cmd命令行窗口默认的搜索顺序是怎样,以及如何更改这些设置就ok。

具体细节参见本人曾写的一篇文章▼▼▼▼▼

如何调整Cmd命令行窗口搜索的顺序?cmd命令行窗口工作原理

对于有些开发者,比如python开发者,一台电脑同时安装python2.x和python3.x,这时候python命令打开的版本当然是路径优先级更高的一个版本了。当python2.x的优先级在3.x之上时,也就是在用2.x的环境做开发。因此开发者可能经常需要调整它们之间的优先级,从而在一台电脑上完成不同python环境的开发。

如何更改环境变量的Path优先级呢?

具体步骤如下图所示:环境变量——系统变量——Path——将对应路径目录向上移。

注意这里只是调整了系统变量的path搜索优先级,用户变量path也会被搜索,因此如果需要也可以进用户变量中的Path进行编辑调整。

用户变量优先级低于系统变量优先级,也就是说先按顺序搜完系统变量的Path(不搜索子目录,要是搜索不累死了?)中有没有对应的可执行文件(exe),如果没有才会去用户变量的Path搜索。

类似python -V和pip install numpy这种命令,其实是先执行python然后再执行-V,pip同理;它们都是从属python命令、pip命令下的,而不是Cmd下的命令。如何获取和python、pip可执行程序有关的命令呢?详见本文的第三部分。

八、CMD命令中路径有空格怎么办?路径空格问题

详见本文的6.4章节。

主要是用好引号,其次可以尝试用磁盘映射,最后可以尝试一下相对路径。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
出现"'env-cmd' 不是内部或外部命令,也不是可运行的程序或批处理文件"的错误提示,通常是由于环境变量配置不正确或者缺少相应的依赖库所致。 要解决此问题,可以按照以下步骤操作: 1. 首先,确保已经通过npm安装了'env-cmd'模块。你可以使用命令`npm install env-cmd`来安装该模块。 2. 如果已经安装了模块,但仍然出现错误提示,那么可能是因为该模块的可执行文件无法在系统中正确地被找到。为了解决这个问题,你可以尝试以下方法: - 检查系统的环境变量配置。确保'env-cmd'的可执行文件所在的路径已经包含在系统的环境变量中。具体来说,找到系统的环境变量配置(例如,在Windows系统中是“系统属性” -> “高级” -> “环境变量”),然后在“Path变量中添加'env-cmd'的安装路径。请确保路径的正确性。 - 如果已经添加了正确的路径,但仍然无法找到'env-cmd'的可执行文件,那么可能是因为系统没有正确地更新环境变量。在这种情况下,建议重新启动计算机,以使环境变量的更改生效。 通过以上步骤,你应该能够解决"'env-cmd' 不是内部或外部命令,也不是可运行的程序或批处理文件"的问题,并且能够成功执行'env-cmd'相关的命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [‘cross-env‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。](https://blog.csdn.net/qiuqiudongdong/article/details/109614131)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [cmd“不是内部或外部命令,也不是可运行的程序或批处理文件”](https://blog.csdn.net/m0_37852904/article/details/79441827)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [nodejs 提示‘xxx’ 不是内部或外部命令解决方法](https://download.csdn.net/download/weixin_38724154/13040735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值