一个脚本拯救你的 windows 环境变量 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
atx
V2EX    分享创造

一个脚本拯救你的 windows 环境变量

  •  
  •   atx 2020-1-21 17:35:48 +08:00 3916 次点击
    这是一个创建于 1764 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开发需要装很多程序,甚至一个程序有好几个版本 根据以往经验,都是把路径加入 PATH,渐渐的 PATH 变量越来越长,不方便管理

    为了缓解这个问题, 我建了个目录 E:\Tools 存放常用的独立命令(如 curl,wget),并将它加入 PATH 但是很多程序有大量的依赖 dll,总不可能都放一起吧

    有时遇到一些命令需要类似 linux alias 设置默认参数在 cmd 里也得手动输入

    思前想后,写了一个批处理简单实现了这个需求, 大概思路是 bat 被执行后取当前文件名(去后缀)作为命令名称,然后通过配置获取对应的程序并执行

    脚本内容如下(配置解析用了 jq,需要自行下载):

    @echo off setlocal ::echo %* set str1=%0 :: 截取当前命令名称 set "cmd1=%str1:.=" & set "xx=%" ::echo %cmd1% set jq_filter=".%cmd1% | join(\" \")" ::echo %jq_filter% :: 用户 jq 获取启动命令和默认参数 :: 这里的配置文件路径需要更具实际情况设置为绝对路径 for /f "delims=" %%i in ('jq -r %jq_filter% n_config.json') do ( :: >= 1 -> ERROR if errorlevel 1 ( echo "no config" goto :EOF ) else ( set rt=%%i ) ) ::echo %rt% %rt% %* 

    配置文件 n_config.json:

    { "python37": { "cmd": "E:\\Python\\Python37\\python.exe", "args": "" }, "test_git": { "cmd": "E:\\git\\bin\\git.exe", "args": "--version" } } 

    现在就可以把脚本命名成需要的名字, 并在配置文件写入目标程序路径参数信息

    列如: 把上面的脚本保存为 python37.bat, 执行就会启动 E:\Python\Python37\python.exe

    大家觉得这个方案如何,或者有更好的方案,或者对脚本的改进,欢迎大伙儿一起焦流

    16 条回复    2020-12-30 18:12:22 +08:00
    pkoukk
        1
    pkoukk  
       2020-12-21 18:43:44 +08:00   2
    可 win10 的 path 是个列表啊..有啥不方便的
    codehz
        2
    codehz  
       2020-12-21 18:51:24 +08:00
    @pkoukk #1 path 有最大长度限制* 4096 个字符
    楼主的方案思路不错,但是太慢了,win 上命令行程序启动延迟还是很明显的
    另外 cmd 是可以 alias 的,就是 doskey(
    superrichman
        3
    superrichman  
       2020-12-21 18:57:13 +08:00 via iPhone
    windows 下的 cmder 可以设置 alias,比默认 cmd 好用很多
    ysc3839
        4
    ysc3839  
       2020-12-22 01:17:08 +08:00 via Android
    > 我建了个目录 E:\Tools 存放常用的独立命令(如 curl,wget),并将它加入 PATH 但是很多程序有大量的依赖 dll,总不可能都放一起吧

    可以,用 msys2,可以共享的 dll 会复用,都是放在一起的。
    jinliming2
        5
    jinliming2  
       2020-12-22 08:03:35 +08:00
    > 我建了个目录 E:\Tools 存放常用的独立命令(如 curl,wget),并将它加入 PATH

    你完全可以程序正常安装,然后在 E:\Tools 里创建快捷方式,快捷方式支持设置参数(直接跟在路径后面就行了),然后把这个路径加入 PATH 之后你就可以通过命令行执行里面的快捷方式了。比如 python.lnk 。
    然后配置环境变量 PATHEXT,把 .LNK 加进去,就可以在命令行里省略快捷方式的拓展名了。/div>
    codehz
        6
    codehz  
       2020-12-22 10:32:17 +08:00 via Android
    提示:dll 也会在 PATH 里找
    另外 curl 不是系统自带的吗
    dyxang
        7
    dyxang  
       2020-12-22 18:05:55 +08:00 via Android
    我是反的,恰巧需要一个把当前路径添加到 path 里的脚本,先前有个程序硬是无法在命令行运行,自己手动去加不小心把 path 全删了,又得系统还原。
    ps:搞不懂为什么网上很多都是说在“用户环境变量”下新建一个叫“PATH”的,不是“系统环境变量”吗,误导人
    codehz
        8
    codehz  
       2020-12-24 08:41:34 +08:00 via Android
    @dyxang 如果没有多用户需求的话,加哪里都一样,windows 会合并用户的 path 和系统的 path
    dyxang
        9
    dyxang  
       2020-12-24 11:13:08 +08:00
    @codehz 实际上在网上我看到好几种版本,也会合并用户的 path 和系统的 path 吗?举个例子,这些莫名其妙的教程,在用户环境变量下设置的是:
    NODEJS_PATH D:/nodejs/
    PATH D:/nodejs/
    Path D:/nodejs/
    [随便写的一个名字] D:/nodejs/

    ,我就是因为 直接运行 npm 没成功,然后照这些弄了还没成功
    codehz
        10
    codehz  
       2020-12-24 11:30:29 +08:00   1
    @dyxang #9 你可以在改用户 PATH 重启后用 cmd echo %PATH% 看看结果,有的话就说明应用上了,出的问题是别的问题(
    lxilu
        11
    lxilu  
       2020-12-24 14:15:46 +08:00
    json 对 cmd 太重了,何不 powershell ConvertFrom-Json?
    atx
        12
    atx  
    OP
       2020-12-25 13:53:27 +08:00
    @lxilu powershell 不是很熟悉,用过几次,不知道 ms 咋想的,搞个内部的 curl,和独立的 curl 语法不一致,搞得很难受,所有没怎么用
    jq 是 c 写的,对性能影响没多大吧
    dorothyREN
        13
    dorothyREN  
       2020-12-25 14:19:51 +08:00
    @lc1450 #12 你说的那个 curl 是个别名吧。
    atx
        14
    atx  
    OP
       2020-12-25 14:30:53 +08:00
    好像是的
    PS C:\Users\Administrator> curl --help
    curl : 未能解析此远程名称: '--help'
    所在位置 行:1 字符: 1
    + curl --help
    + ~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest],WebExce
    ption
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
    Darkatse
        15
    Darkatse  
       2020-12-26 16:13:06 +08:00
    直接 scoop install curl wget / scoop install npm nodejs 就行了,系统变量什么的直接给你配置好了
    lxilu
        16
    lxilu  
       2020-12-30 18:12:22 +08:00
    删除别名 curl -> Invoke-WebRequest
    del alias:\curl
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3450 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 04:38 PVG 12:38 LAX 21:38 JFK 00:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86