Add line to system variable path with batch file

I was looking for a script that would allow me to add text at the end of the current System Variable Path. Are there any suggestions on how I can do this? ("add": C: \ Program Files (x86) \ Java \ jre7 \ bin \ java.exe "into the existing text)

+4
source share
2 answers
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 

This CMD should work in an elevated manner, otherwise cscript.exe will simply write "Permission denied" and nothing will happen.

+2
source

IF you want the simplest solution, you can use the SETX command in Windows 7:

 SETX PATH "%PATH%;C:\New Added Folder" 

PS1: Use the -M option if you want the SETX command to make changes on the HKLM key.

PS2: the changes are PERMANENT, but you need to restart the user session or console.

If you need a more professional thing, you can use my PATHS utility written in Ruby, and I made an executable file for Windows.

 PATHS.EXE 

http://exoshare.com/download.php?uid=1TKIOMR6

enter image description here

enter image description here

enter image description here

Options:

/? (or) -help | Show this information.

-l (or) -list | List the entries.

-c (or) -clean | Clean duplicates and invalid directories in paths.

-r (or) - reset | Reset the default path to the default Windows.

-a (or) -add | Add a note.

-d (or) -del | Delete entry.

-add -current | Force the entry to the current user path.

-add -local | Forcibly add an entry to the local machine path.

Examples:

PATHS -l [+] Indexes all records.

PATHS -a "C: \ Folder" [+] Adds an entry to the local path.

PATHS -a current "C: \ Folder" [+] Adds an entry to the current user path.

PATHS -d "3" [+] Deletes the 3rd entry in the indexed list.

PATHS -d "C: \ Folder" [+] Deletes the entry.

PATHS.RB

 require 'win32/registry' require 'rainbow' # PATHS v0.1 # # By Elektro H@cker # 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 H@cker ".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
source

All Articles