我一直在寻找一个脚本,可以让我在当前系统变量路径的末尾添加文本。 我有什么建议可以做到吗? (spesificly,加入 “; C:\ Program Files文件(x86)的\的Java \ jre7 \ BIN \ java.exe的” 到现有文本)使用批处理文件添加一行到系统变量路径
回答
echo Set objShell = CreateObject("WScript.Shell") > %TEMP%\sp.vbs
echo Set objSystemEnv = objShell.Environment("SYSTEM") >> %TEMP%\sp.vbs
echo objSystemEnv("Path") = objSystemEnv("Path") ^& ";C:\Program Files (x86)\Java\jre7\bin" >> %TEMP%\sp.vbs
cscript.exe /nologo %TEMP%\sp.vbs
del %TEMP%\sp.vbs
这CMD必须运行升高,否则的Cscript.exe将只写“权限被拒绝”并且什么都不会发生。
这不是一个批处理文件。这是一个批处理文件,创建一个脚本文件然后启动它。虽然它可以工作,但它实际上不是对问题的回答,而是使用批处理文件编写c#源文件,运行编译器,然后启动可执行文件。 –
@KenWhite,它是一个批处理文件,它完成了工作。 C#源代码不会:1.从批处理文件中执行起来要困难得多2.在Vista之前,通常没有csc.exe。 – Soonts
你错过了我的观点。这个问题是特别标记为'windows批处理',并且你的答案不使用Windows批处理文件来修改'PATH'。它使用批处理文件来编写和执行不同类型的脚本,就像我上面所说的那样。这不是所问问题的答案。你说过“使用VBScript,但增加了从批处理文件而不是记事本中编写脚本文件的开销。” (我没有downvote你的答案,顺便说一句,只是指出它没有解决问题的问题。) –
如果你想你可以在Windows 7中使用SETX命令最简单的办法:
SETX PATH "%PATH%;C:\New Added Folder"
PS1:如果你想SETX命令执行的HKLM关键的变化使用-M参数。
PS2:更改是永久的,但您需要重新启动用户会话或控制台。
如果你想要一个更专业的小东西,那么你可以使用我的工具PATHS在Ruby中写道,我为Windows制作了一个可执行文件。
PATHS.EXE
http://exoshare.com/download.php?uid=1TKIOMR6
选项:
/? (或)-help |显示此信息。
-l(或)-list |列出条目。
-c(或)-clean |清除路径中的重复项和无效目录。
-r(或)-reset |将路径重置为Windows默认值。
-a(或)-add |添加一个条目。
-d(or)-del |删除一个条目。
-add -current |强制将条目添加到当前用户路径中。
-add -local |强制将条目添加到本地机器路径中。
实例:
PATHS -l [+]索引的所有条目。
PATHS -a“C:\ Folder” [+]将条目添加到本地路径中。
PATHS -a当前“C:\ Folder” [+]将条目添加到当前用户路径中。
PATHS -d“3” [+]删除索引列表的第3个条目。
PATHS -d“C:\ Folder” [+]删除条目。
PATHS.RB
require 'win32/registry'
require 'rainbow'
# PATHS v0.1
#
# By Elektro [email protected]
# Description:
# -----------
# This is a tool to manage the windows PATH enviroment.
exit if Object.const_defined?(:Ocra)
def logo()
print "
PATHS v0.1
By Elektro [email protected]
".foreground(:white)
end
def help()
print '
Options:
/? (or) -help | Show this info.
-l (or) -list | List the entries.
-c (or) -clean | Clean duplicates and invalid directories in the paths.
-r (or) -reset | Reset the paths to the Windows defaults.
-a (or) -add | Add a entry.
-d (or) -del | Delete a entry.
-add -current | Force adding a entry into the current user path.
-add -local | Force adding a entry into the local machine path.
Examples:
PATHS -l
[+] Indexes all the entries.
PATHS -a "C:\Folder"
[+] Adds a entry into the local path.
PATHS -a current "C:\Folder"
[+] Adds a entry into the current user path.
PATHS -d "3"
[+] Deletes the 3rd entry of the indexed list.
PATHS -d "C:\Folder"
[+] Deletes a entry.
'
Process.exit
end
def error(kind)
print "[+] ERROR"
if kind == "pos" then print "\n Index #{ARGV[1]} is out of range, only #{$pos} entries.\n" end
if kind == "notfound" then print "\n Directory \"#{ARGV[1]}\" not found on PATH.\n" end
Process.exit
end
def args()
if ARGV.empty? then get_paths("visible") end
if ARGV[0] == "/?" or ARGV[0] =~ /^-help$/i then help() end
if ARGV[0] =~ /^-l$/i or ARGV[0] =~ /^-list$/i then get_paths("visible") end
if ARGV[0] =~ /^-c$/i or ARGV[0] =~ /^-clean$/i then clean_path() end
if ARGV[0] =~ /^-d$/i or ARGV[0] =~ /^-del$/i then del_path() end
if ARGV[0] =~ /^-a$/i or ARGV[0] =~ /^-add$/i then add_path() end
if ARGV[0] =~ /^-r$/i or ARGV[0] =~ /^-reset$/i then reset_path() end
end
def get_paths(visibility)
$pos = 0
# HKCU path
if not visibility == "hidden" then puts "\n [+] Current User PATH:\n\n" end
Win32::Registry::HKEY_CURRENT_USER.open('Environment') do |reg|
for dir in reg['Path', Win32::Registry::REG_SZ].split(";").sort do
$pos = $pos+1
dir = dir.gsub(/^PATH=/, "")
instance_variable_set "@_#{$pos}", dir + "?CURRENT_USER"
if not File.directory? dir then invalid = "(Directory doesn't exist)".foreground(:red).bright else invalid ="" end
if not visibility == "hidden"
if $pos < 10 then puts " #{$pos.to_s} = #{dir} #{invalid}" else puts " #{$pos.to_s}= #{dir} #{invalid}"end
end
end
end
# HKLM path
if not visibility == "hidden" then puts "\n\n [+] Local Machine PATH:\n\n" end
Win32::Registry::HKEY_LOCAL_MACHINE.open('SYSTEM\CurrentControlSet\Control\Session Manager\Environment') do |reg|
for dir in reg['Path', Win32::Registry::REG_SZ].split(";").sort do
$pos = $pos+1
dir = dir.gsub(/^PATH=/, "")
instance_variable_set "@_#{$pos}", dir + "?LOCAL_MACHINE"
if not File.directory? dir then invalid = "(Directory doesn't exist)".foreground(:red).bright else invalid ="" end
if not visibility == "hidden"
if $pos < 10 then puts " #{$pos.to_s} = #{dir} #{invalid}" else puts " #{$pos.to_s}= #{dir} #{invalid}"end
end
end
end
if not visibility == "hidden" then Process.exit end
$max_pos = $pos
end
def add_path()
if ARGV[1] =~ /^-current$/ then key = "current" else key = "local" end
# HKCU path
if key == "current"
Win32::Registry::HKEY_CURRENT_USER.open('Environment', Win32::Registry::KEY_ALL_ACCESS) do |reg|
value = reg['Path']
reg.write('Path', Win32::Registry::REG_SZ, "#{value};#{ARGV.last}")
puts "[+] Entry added in User PATH: #{ARGV.last}"
end
end
# HKLM path
if key == "local"
Win32::Registry::HKEY_LOCAL_MACHINE.open('SYSTEM\CurrentControlSet\Control\Session Manager\Environment', Win32::Registry::KEY_ALL_ACCESS) do |reg|
value = reg['Path']
reg.write('Path', Win32::Registry::REG_SZ, "#{value};#{ARGV.last}")
puts "[+] Entry added in Local PATH: #{ARGV.last}"
end
end
end
def del_path()
get_paths("hidden")
final_path = ""
found = 0
notfound = 0
if ARGV[1] =~ /^[1-9]+$/
choose = instance_variable_get "@_#{ARGV[1]}"
if ARGV[1].to_i > $max_pos.to_i then error("pos") end
# HKCU PATH index deletion
if choose["?CURRENT_USER"]
Win32::Registry::HKEY_CURRENT_USER.open('Environment', Win32::Registry::KEY_ALL_ACCESS) do |reg|
value = reg['Path']
for dir in reg['Path', Win32::Registry::REG_SZ].split(";").sort do
if not dir == choose.split("?").first then final_path << ";" + dir end
end
reg.write('Path', Win32::Registry::REG_SZ, final_path[1..-1])
end
puts "[+] Entry deleted in User PATH: #{choose.split("?").first}"
end
# HKLM PATH index deletion
if choose["?LOCAL_MACHINE"]
Win32::Registry::HKEY_LOCAL_MACHINE.open('SYSTEM\CurrentControlSet\Control\Session Manager\Environment', Win32::Registry::KEY_ALL_ACCESS) do |reg|
value = reg['Path']
for dir in reg['Path', Win32::Registry::REG_SZ].split(";").sort do
if not dir == choose.split("?").first then final_path << ";" + dir end
end
reg.write('Path', Win32::Registry::REG_SZ, final_path[1..-1])
end
puts "[+] Entry deleted in Local PATH: #{choose.split("?").first}"
end
elsif
# HKCU PATH str deletion
Win32::Registry::HKEY_CURRENT_USER.open('Environment', Win32::Registry::KEY_ALL_ACCESS) do |reg|
value = reg['Path']
for dir in reg['Path', Win32::Registry::REG_SZ].split(";").sort do
if not dir =~ /^#{Regexp.escape(ARGV[1])}$/i then final_path << ";" + dir else found = "yes" end
end
reg.write('Path', Win32::Registry::REG_SZ, final_path[1..-1])
if found == "yes" then puts "[+] Entry deleted in User PATH: #{ARGV[1]}" else notfound = 1 end
end
# HKLM PATH str deletion
final_path = ""
found = ""
Win32::Registry::HKEY_LOCAL_MACHINE.open('SYSTEM\CurrentControlSet\Control\Session Manager\Environment', Win32::Registry::KEY_ALL_ACCESS) do |reg|
value = reg['Path']
for dir in reg['Path', Win32::Registry::REG_SZ].split(";").sort do
if not dir =~ /^#{Regexp.escape(ARGV[1])}$/i then final_path << ";" + dir else found = "yes" end
end
reg.write('Path', Win32::Registry::REG_SZ, final_path[1..-1])
if found == "yes" then puts "[+] Entry deleted in Local PATH: #{ARGV[1]}" else notfound = notfound+1 end
if notfound == 2 then error("notfound") end
end
end
end
def reset_path()
Win32::Registry::HKEY_CURRENT_USER.open('Environment', Win32::Registry::KEY_ALL_ACCESS) do |reg| reg.write('Path', Win32::Registry::REG_SZ, 'C:\Windows;C:\Windows\system32;C:\Windows\System32\Wbem;C:\Windows\syswow64') end
Win32::Registry::HKEY_LOCAL_MACHINE.open('SYSTEM\CurrentControlSet\Control\Session Manager\Environment', Win32::Registry::KEY_ALL_ACCESS) do |reg| reg.write('Path', Win32::Registry::REG_SZ, 'C:\Windows;C:\Windows\system32;C:\Windows\System32\Wbem;C:\Windows\syswow64') end
puts "[+] PATH restored to Windows defaults."
end
def clean_path()
puts "\n[+] Searching invalid or duplicated entries in the PATH...\n\n"
# HKCU PATH
final_path = ""
Win32::Registry::HKEY_CURRENT_USER.open('Environment', Win32::Registry::KEY_ALL_ACCESS) do |reg|
value = reg['Path']
for dir in reg['Path', Win32::Registry::REG_SZ].split(";").sort do
if File.directory? dir and not final_path[/#{Regexp.escape(dir)}$/i] then final_path << ";" + dir else puts "[+] Entry deleted in User PATH: #{dir}" end
end
reg.write('Path', Win32::Registry::REG_SZ, final_path[1..-1])
end
# HKLM PATH
final_path = ""
Win32::Registry::HKEY_LOCAL_MACHINE.open('SYSTEM\CurrentControlSet\Control\Session Manager\Environment', Win32::Registry::KEY_ALL_ACCESS) do |reg|
value = reg['Path']
for dir in reg['Path', Win32::Registry::REG_SZ].split(";").sort do
if File.directory? dir and not final_path[/#{Regexp.escape(dir)}$/i] then final_path << ";" + dir else puts "[+] Entry deleted in Local PATH: #{dir}" end
end
reg.write('Path', Win32::Registry::REG_SZ, final_path[1..-1])
end
puts "\n[+] PATH is cleaned.\n\n"
end
logo()
args()
Process.exit
- 1. 从批处理文件追加到系统变量路径
- 2. 批处理文件 - 用户输入设定的系统变量路径
- 3. 未找到eclipse路径变量中的批处理文件
- 4. 批处理 - 将文本文件中的路径(文本)加载到变量中
- 5. 将变量添加到文件路径
- 6. 变量For用于批处理文件中的路径
- 7. 路径在一个批处理文件
- 8. 调用批处理文件报告:“系统找不到指定的路径”
- 9. 批处理文件使用系统变量从文本文件中读取
- 10. 添加到批处理中的变量?
- 11. 在批处理文件中的文件路径中使用变量
- 12. 在批处理文件中使用变量作为文件路径
- 13. 通过命令行添加系统路径环境变量?
- 14. 在Windows下自动添加Python路径到PATH系统变量
- 15. 设置环境变量路径通过批处理文件
- 16. Windows CMD - 从批处理文件重置路径变量?
- 17. 具有变量目录路径的批处理文件
- 18. 从Windows批处理文件设置系统环境变量?
- 19. 通过批处理文件为系统设置环境变量
- 20. 如何将变量添加到批处理文件?
- 21. 将java变量添加到批处理文件
- 22. 批处理文件变量
- 23. 批处理文件变量
- 24. 使用路径中的空格执行批处理文件
- 25. 使用Java在远程系统上执行批处理文件
- 26. 使用变量作为文件路径将ImageIcon添加到JPanel
- 27. 添加变量文件路径在Java
- 28. 批处理文件登录系统
- 29. Windows批处理文件系统备份
- 30. 批处理文件 - VBScript运行时错误:找不到路径
你可以这样做,但只会持续到您的批处理文件完成。如果你想让它成为一个永久的变化,它将无法工作。 –