[问题] 安装 Console 应用程式

楼主: falcon (falken)   2024-04-25 19:36:43
准确来说是把程式目录新增至环境变量 PATH 之中,
方便在终端机中使用档名或 basename 呼叫程式并执行。
但当程式越来越多后 PATH 就会变得越来越臃肿。
为了保持 PATH 简洁,需要统一使用同一个目录,我尝试了以下方法。
方法 1. 在同一目录下放置所有程式的子目录、档案
这是最简单粗暴的方法
但,由于所有程式的子目录与档案都混在一起,
可能遇到档案冲突,且管理上也很不方便。
方法 2. 在同一目录建立目标程式的符号连结
PowerShell:
作者: smallreader (小读者)   2024-04-25 19:51:00
PATH为什么会嫌太杂乱?太长再新增一行就好了吧啊 第二个方法 改用python就不怕跳脱字符了subprocess.run(["路径"]+sys.argv[1:])
作者: tonyhsie (一笔挥毫天下定)   2024-04-26 14:06:00
正常都是1搭配3吧 大部分单一执行档集中在一个目录少部分一堆档案的程式 改用批次档 放在跟1同一目录下你如果会写C#的话 可以不要用bat 自己写个简单的壳就好壳作的事就是单纯切目录跟传递参数而已然后把壳集中放在同一目录下就好
作者: giacch   2024-04-26 14:18:00
若是Windows, 就是安装程式, 建立"捷径"纯Console环境, 不是管理PATH, 就是要弄出类似"捷径"的BATPATH新增C:\BIN, BIN底下建立各程式的BAT(当捷径用)BAT 内容包含 CD PathToProgram 与 Program.exe更正 Program.exe %* 不要"号
作者: smallreader (小读者)   2024-04-26 21:25:00
https://i.imgur.com/cfRGvg2.png 写写存成ffmpeg.py档名.py可以直接呼叫档名不带.py 前面也不用叫python我这边py档案都是打basename就能执行的耶PS> (Get-Command ffmpeg).path =>也会回传ffmpeg.py只要副档名有注册用python开启就能这样替代
作者: giacch   2024-04-26 23:09:00
# Program.ps1Push-Location C:\Windows& CMD.EXE /C "DIR NOTEPAD.EXE"Pop-Location我忘了要传参数& CMD.EXE /C DIR $ARGS # CMD 那行改这样Program.ps1 /B NOTEPAD.EXE # 这样执行
作者: smallreader (小读者)   2024-04-27 00:22:00
楼上..只要还经过cmd 答案就不及格欸...不对啊,所以方法3用ps写不就解决了& "路径" $args #存成.ps1
作者: giacch   2024-04-27 00:38:00
对呀 都能执行 CMD 了 就执行你想执行的程式就好啦
作者: smallreader (小读者)   2024-04-27 00:40:00
至于cd完全是多余动作,不需要
楼主: falcon (falken)   2024-04-27 01:03:00
虽然还不晓得会不会引发其他问题总之,先感谢各位提供的方法
作者: smallreader (小读者)   2024-04-27 02:17:00
更正,原来打basename认得到.py为可执行档,是因为系统变量的PATHEXT里面有包含.PY,然后虽然PATHEXT不包含.PS1,但因为壳层用PS,所以他自己会额外去找.PS1
作者: hunandy14 (Charlott.HonG)   2024-04-29 11:54:00
你那方法3 "cmd 的方式跳脱字符" 啥意思有范例吗然后环境被限制在cmd吗? 如果是powershell的话有其他解上面的pwsh 那样写有隐患 会被当作一大串字传递
楼主: falcon (falken)   2024-04-29 23:31:00
但这个问题拿掉param(),从$args中找出目标参数的值取代为绝对路径就好了。我现在开始觉得用脚本管理环境变量PATH还比较实际点…之前就是那样做的
作者: hunandy14 (Charlott.HonG)   2024-04-30 09:56:00
一个比较无脑的办法是利用临时环境变量来处理要用bat难度在于转送参数,觉得一定会有东西丢失要是环境没限制在cmd说实在话ps1不用烦恼内建就有$args咦不对呀试了一下需要处理的只有引号,跳脱不用处理吧
楼主: falcon (falken)   2024-04-30 13:38:00
bat的args一定跳脱字符,无论在cmd还是powershell环境中例如%^都是cmd中则是特殊字符,这导致ffmpeg输出frame为个图片时别无法将档名中的%d扩展为0,1,2,3...另外,我还发现ps1要实现pipeline功能似乎必须用到param()一旦使用param()就必须为为目标程式所有参数也宣告变量
作者: hunandy14 (Charlott.HonG)   2024-04-30 16:32:00
可以传进去拉 https://i.imgur.com/0ApuLRi.pngparam() 的问题就我前面跟你说的有隐患要嘛自己拆,要嘛用内建的$args一次收全部
楼主: falcon (falken)   2024-05-01 21:47:00
我还发现 $p.StartInfo.FileName="basename" 不适用 bat
作者: hunandy14 (Charlott.HonG)   2024-05-02 07:59:00
摁搞不定的话就直接无脑加吧

Links booklink

Contact Us: admin [ a t ] ucptt.com