概述
# coding: utf8
"""
模块描述: Python--->Windows10永久添加环境变量, 避免1024个字符限制
问题: Windows系统提供的DOS命令, setx 添加环境变量的方法, 有1024个字符限制
诊断:
思路一: 使用追加方式添加环境变量, 但是没有找到相关命令;
思路二: 重设用户环境变量为: setx "Path" "%%Path%%;新的环境变量路径"
%Path% 就代指了电脑系统的环境变量, 但是这样做会重写用户的环境变量, 不可取;
思路三: Windows系统的环境变量, 都有 C:windows 这个路径, 只要在这个路径的文件夹下,
将新的环境变量路径下的所有文件, 文件夹, 都软链接到 C:windows 下, 就相当于有了新的环境变量;
可行, 软链接一般不占空间,
注意的点: C:windows 一般需要管理员权限, 所以需要在bat命令中, 首先加上几行代码, 获取管理员权限;
目前, 思路三是处方.
"""
import os
import subprocess
get_administrator_rights_cmd_str = """
@echo off
CLS
:init
setlocal DisableDelayedExpansion
set "batchPath=%~0"
for %%k in (%0) do set batchName=%%~nk
set "vbsGetPrivileges=%temp%OEgetPriv_%batchName%.vbs"
setlocal EnableDelayedExpansion
:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )
:getPrivileges
if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"
ECHO args = "ELEV " >> "%vbsGetPrivileges%"
ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"
ECHO args = args ^& strArg ^& " " >> "%vbsGetPrivileges%"
ECHO Next >> "%vbsGetPrivileges%"
ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%"
"%SystemRoot%System32WScript.exe" "%vbsGetPrivileges%" %*
exit /B
:gotPrivileges
setlocal & pushd .
cd /d %~dp0
if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul & shift /1)
"""
def set_env(target_dir_path):
"""
功能: 给Windows系统添加环境变量, Windows系统版本不能太低, 要支持软链接
:param target_dir_path: 目标文件夹路径, 就是要添加到环境变量的文件夹路径
:return:
"""
# 创建一个bat文件, 来跑命令
bat_file_path = os.path.join(os.getcwd(), "set_windows_env.bat")
with open(bat_file_path, "w") as f:
# 首先要获取管理员权限
f.write(get_administrator_rights_cmd_str)
for file_name in os.listdir(target_dir_path):
file_path = os.path.join(target_dir_path, file_name)
if os.path.isdir(file_path):
# 是文件夹, 那么就创建文件夹的软链接
cmd_str = "mklink /d C:windows{} {}n".format(file_name, file_path)
elif os.path.isfile(file_path):
# 是文件, 那么就创建文件的软链接
cmd_str = "mklink C:windows{} {}n".format(file_name, file_path)
f.write(cmd_str)
subprocess.run(bat_file_path, shell=True)
if __name__ == "__main__":
set_env(r"F:test_env")
最后
以上就是坦率老鼠为你收集整理的Windows10永久添加环境变量---避免1024个字符限制的全部内容,希望文章能够帮你解决Windows10永久添加环境变量---避免1024个字符限制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复