[問題] 安裝 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