亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > OS > Windows > 正文

Bash玩轉腳本5之Windows上修改環境變量的腳本系統

2024-06-28 16:01:39
字體:
來源:轉載
供稿:網友

目錄(?)[+]

一、前言


我不太喜歡用Window打代碼,感覺到處都會被束縛,沒有Mac那么行云流水 - 0-

比如今天在Window上開發的時候,遇到了一個問題:

使用新版本的JDGUI時候,提示需要使用JDK7以上的版本,于是乎只能win+PauseBreak呼出控制面板,在高級系統里面去設置java_HOME的值為JDK7的路徑。

設置完就感覺很不遍歷,假如我有需求需要不斷修改Java的版本呢?例如eclipse需要JAVA6,但是JDGUI卻需要JAVA7(在Mac上只需要一個bash腳本,修改Java指向的軟鏈接即可),那在Windows上該怎么弄呢?

于是乎,便花了幾個小時順著這個方向,從零開始整一整Window上的腳本環境。

二、目的

從直接需求出發,我想實現的是一個能夠修改Java環境變量的腳本。要實現這個需求,實際上需要完成下面幾點:

可以在cmd的任何目錄直接執行指令接收參數,動態的修改環境變量的值重啟cmd能立即生效

最后達到的狀態便是,win+R呼出cmd 這里寫圖片描述

三、Just do it

按照思路一個問題一個問題的來:

1、可以在cmd任何目錄直接執行指令

首先想到的便是通過環境變量實現,在環境變量中添加一個值,使得在執行指令的時候,系統能夠搜尋到該目錄里面的腳本。(其實就類似與linux和Unix中的PRofile文件)

添加一個BAT_HOME,指向一個具體的目錄,我們之后會把腳本放到該目錄。

這里寫圖片描述

然后在環境變量PATH中添加%BAT_HOME% 這里寫圖片描述

準備工作完成,我們在BAT_HOME 的文件夾里面的新建一個bat文件TestTT.bat進行測試。

TestTT.bat

@echo offtitle hello world:startecho helloworldpause
1234512345

呼出cmd,執行TestTT 這里寫圖片描述

這樣便有了最初的實現了,方便我們在任何目錄位置執行腳本??梢哉f這一步是非常重要的,因為我們有了自己的腳本體系了,以小見大,以后可以把腳本都放在這個目錄,來實現各種各樣的功能了。

2、接收參數,動態的修改環境變量的值

在這個實現上,經過了些許思考,好不猶豫的選擇了Python~~哈哈!理由很簡單,bat語法不友好,python在邏輯上更容易修改(當然語言只是工具,具體的實現用自己喜歡就行)

我是用bat腳本調用python腳本實現邏輯控制,在具體修改環境變量的時候,再使用os.system調用bat腳本實現環境變量的修改。(這些bat腳本我都放在了BAT_HOME中)

changePath.bat : 簡單的調用python腳本

@echo offpython F:/PythonProj/pathChange/pathChange.py %1 %21212

python腳本

# -*- coding: utf-8 -*-# @auth atanyyang# @blog http://blog.csdn.net/yang8456211 import osimport sys# 這里路徑要加一層引號,否則會被截斷JAVA_HOME_6 = '"C:/Program Files (x86)/Java/jdk1.6.0_13"'JAVA_HOME_7 = '"C:/Program Files/Java/jdk1.7.0_80"'PYTHON_HOME_2 = '"D:/Program Files/Python23"'PYTHON_HOME_3 = '"D:/Program Files/Python35-32"'def delete(lan): if lan == 'java': _lan = 'JAVA_HOME' elif lan == 'python': _lan = 'PYTHON_HOME' elif lan == 'test': _lan = 'TEST_HOME' else: return os.system('deletepath %s' % _lan)def add(lan,ver): if lan == 'java': _lan = 'JAVA_HOME' if ver == "6": _ver = JAVA_HOME_6 elif ver == "7": _ver = JAVA_HOME_7 elif lan == 'python': _lan = 'PYTHON_HOME' if ver == "2": _ver = PYTHON_HOME_2 elif ver == "3": _ver = PYTHON_HOME_3 else: return elif lan == 'test': _lan = 'TEST_HOME' _ver = "addnew1" else: return #print ("=========>" , _lan ,"--",_ver) os.system('addpath %s %s' % (_lan,_ver))def main(): # 檢查輸入 if (len(sys.argv) != 3): print("argv is error, len is " + len(sys.argv)) sys.exit(2) lan = sys.argv[1] version = sys.argv[2] if lan not in ['java','python','test']: print ("lan is wrong, plz check"); sys.exit(3) if (lan == 'java' and version not in ['6','7']) or (lan == 'python' and version not in ['2','3']): print ("version is wrong, plz check"); sys.exit(4) # 先刪除 delete(lan) # 再添加 add(lan,version)if __name__ == '__main__': main()123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081

這里有一個問題需要注意,耽誤了我很大部分的時間,就是在使用os.system調用bat腳本的時候,os.system('addpath %s %s' % (_lan,_ver)),這里傳入的_ver路徑如果存在空格會被截斷!導致環境變量會被修改成C:/Program,而不是正確的路徑值。


經過研究,處理方法有兩種:

(第一種是在有空格的路徑雙引號外,再加多一層單引號)

例如:

JAVA_HOME_6 = '"C:/Program Files (x86)/Java/jdk1.6.0_13"'11

在JAVA_HOME_6 字符串外加多一層單引號,就能夠正常傳遞帶空格的字符串了~

(第二種是不要使用os.system方法,修改為subprocess.popen)

理論上我應該少用os.system 而改為用subprocess.popen,但是因為subprocess是python2.4以后才有的Api,而我在修改Java環境變量的同時,也有修改python版本的需求,當python切到2.3版本的時候,subprocess便找不到了,因此在這里使用了第一種的方法。

參數已經處理完畢,我們調用bat腳本,來實現環境變量的修改,這里為了簡單我選擇寫了兩個腳本一個addpath,一個deletepath,方便以后的復用,在這里我們我們先刪除環境變量,再添加環境變量。

deletepath

@echo offtitle deletepath:startecho begin deletepath %1set regpath=HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/session Manager/Environmentset evname=%1reg delete "%regpath%" /v "%evname%" /fecho end deletepath %11234567891012345678910

addpath

@echo offtitle addpathecho begin addpath %1 %2set regpath=HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environmentset evname=%1set thepath=%2reg add "%regpath%" /v %evname% /d %thepath% /f:: 如果沒有這一句不會立即生效setx %1 %2 -m echo end addpath %1 %212345678910111213141234567891011121314

3、重啟cmd能立即生效

最開始寫完腳本嘗試的時候,發現環境變量并不能立即生效,必須打開環境變量手動點擊一次確定才能生效,這里耗費了較多時間去Google這個問題。

最后發現,在腳本里面應該已經看到,如果需要立即生效,需要使用setx %1 %2 -m,這個指令的意思其實就是修改環境變量中%1中的值為%2,使其立即生效。

因此,bat層的腳本也可以通過setx直接實現修改Java的環境變量,只需要簡單的修改一下python和bat腳本,在此就不贅述了。

楊光(atany)原創,轉載請注明博主與博文鏈接,未經博主允許,禁止任何商業用途。 博文地址:http://blog.csdn.net/yang8456211/article/details/54914505 博客地址:http://blog.csdn.net/yang8456211 本文遵循“署名-非商業用途-保持一致”創作公用協議


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黑人巨大精品欧美一区二区免费| 亚洲精品美女在线观看播放| 国产精品久久久久久久久借妻| 69av成年福利视频| 亚洲精品电影久久久| 国产精品久久一区主播| 亚洲精品小视频| 国产精品嫩草影院久久久| 亚洲va电影大全| 国产精品福利片| 91精品久久久久久久久不口人| 色先锋久久影院av| 亚洲欧美色婷婷| 欧美成人精品影院| 永久免费看mv网站入口亚洲| 欧美性xxxxx| 亚洲最大的av网站| 欧美又大又粗又长| 亚洲人永久免费| 日韩视频亚洲视频| 欧美日韩亚洲精品一区二区三区| 亚洲国产一区二区三区四区| 这里只有精品视频| 成人写真福利网| 久操成人在线视频| 91高清在线免费观看| 欧美日韩美女在线观看| 日韩精品中文在线观看| 亚洲大尺度美女在线| 成人美女av在线直播| 亚洲国产精品视频在线观看| 全亚洲最色的网站在线观看| 日韩高清人体午夜| 欧美高清视频在线| 5278欧美一区二区三区| 国产极品jizzhd欧美| 久久免费视频在线观看| 久久精品视频亚洲| 日韩一区二区三区在线播放| 日韩精品视频在线观看免费| 精品久久久久久中文字幕一区奶水| 亚洲欧美日韩久久久久久| 色综久久综合桃花网| 欧洲成人在线观看| 92看片淫黄大片欧美看国产片| 欧美电影在线观看| 日韩av在线天堂网| 国产乱人伦真实精品视频| 精品国产户外野外| 97碰碰碰免费色视频| 欧美在线视频一二三| 欧美高清理论片| 日韩日本欧美亚洲| 欧美另类极品videosbest最新版本| 国产精品视频自在线| 欧美专区日韩视频| 欧美激情免费在线| 中日韩美女免费视频网址在线观看| 久久精品视频播放| 国产精品自拍偷拍| 国产美女搞久久| 91手机视频在线观看| 亚洲www永久成人夜色| 亚洲精品一区二区三区不| 日韩欧美在线国产| 欧美体内谢she精2性欧美| 亚洲国产精品久久精品怡红院| 精品香蕉一区二区三区| 欧美在线性视频| 亚洲激情视频在线观看| 日韩中文字幕在线| 色综合久久中文字幕综合网小说| 亚洲精品在线观看www| 这里只有视频精品| 不卡伊人av在线播放| 久久五月天综合| 97国产精品视频人人做人人爱| 精品爽片免费看久久| 精品久久久国产精品999| 久久偷看各类女兵18女厕嘘嘘| 日本中文字幕成人| 91精品91久久久久久| 欧美成人精品h版在线观看| 国产精品观看在线亚洲人成网| 成人在线国产精品| 亚洲全黄一级网站| 亚洲精品久久久久中文字幕二区| 亚洲国产天堂久久国产91| 精品国偷自产在线视频| 九九热精品视频在线播放| 欧美性一区二区三区| 亚洲精品福利免费在线观看| 亚洲一区二区福利| 一区二区三区四区视频| 91精品国产色综合| 2018中文字幕一区二区三区| 国产精品69av| 日韩av在线精品| 国产精品96久久久久久又黄又硬| 国产专区精品视频| 亚洲一区二区国产| 欧美一级电影久久| 国产精品一区二区女厕厕| 久久久精品中文字幕| 久久久久久久久久久av| 欧洲亚洲在线视频| 九九久久国产精品| 亚洲精品720p| 欧美亚洲国产成人精品| 国模精品一区二区三区色天香| 大量国产精品视频| 国产精品私拍pans大尺度在线| 国产91热爆ts人妖在线| 91视频免费在线| 在线精品视频视频中文字幕| 国产亚洲欧美日韩精品| 91精品中国老女人| 日韩av网站大全| 亚洲黄色www| 国产精品免费久久久久影院| 91精品在线观看视频| 大桥未久av一区二区三区| 亚洲自拍高清视频网站| 亚洲欧美日本伦理| 欧美国产日韩一区二区| 韩国三级日本三级少妇99| 大荫蒂欧美视频另类xxxx| 3344国产精品免费看| 在线性视频日韩欧美| 中文字幕久热精品在线视频| 亚洲一区亚洲二区亚洲三区| 久久久久久国产精品三级玉女聊斋| 欧美精品久久久久久久| 亚洲娇小xxxx欧美娇小| 久久天天躁狠狠躁夜夜躁2014| 亚洲精品一二区| 国产精品吹潮在线观看| 日韩有码在线电影| 国产一区二区三区三区在线观看| 久久成人一区二区| 久久深夜福利免费观看| 亚洲美女精品久久| 国产午夜精品一区二区三区| 最新亚洲国产精品| 国产婷婷97碰碰久久人人蜜臀| 精品国产一区二区三区久久久| 国产午夜精品视频| 日韩精品中文字幕在线播放| 另类图片亚洲另类| xvideos成人免费中文版| 日韩网站免费观看| 亚洲片国产一区一级在线观看| 久久伊人精品视频| 国产精品爱啪在线线免费观看| 97视频网站入口| 亚洲色在线视频| 欧美三级欧美成人高清www| 国产欧美亚洲精品| 国产精品久久久久久久久久99| 欧美大片欧美激情性色a∨久久| 成人免费网站在线看| 国产精品jizz在线观看麻豆| 久久不射热爱视频精品| 日韩精品免费在线视频|