分享

!!!!! 使用系统环境变量继承,实现软件便携化

 看见就非常 2012-10-14

使用系统环境变量继承,实现软件便携化

很多的软件工具,使用中需要用绝对路径。
先说一下对软件的便携化,我曾经使用的两个方案:

方法一、虚拟盘符

使用 subst 命令
首先在U盘某个文件夹下建立一个bat文件,内容为

@ECHO OFF
subst X: %~d0\xxx\yyy

----------------------
上面的 %~d0 是获取bat所在盘符
xxx\yyy 替换成自己U盘上的文件夹

上面的bat文件运行之后,系统会多出一个虚拟盘符 X:


U盘里面的软件,都用X:开始的路径来调用


这种方法的弊端主要在于,自己电脑上的软件和U盘的软件配置同步不太方便
为了免于修改之苦,在自己电脑上也用虚拟盘符来配置软件,结果带来别的一些麻烦
但文件夹结构改变时,需要更改不同的配置文件

 

方法二、nircmd

用 ~$folder.nircmd$ 获取 nircmd 自身路径
使用格式:

nircmd execmd ~$folder.nircmd$\plugin\xxx.vbs

这种方法会让命令变得很长,而且使用了一个外部程序,理论上,会使得命令的运行慢一点点。
不过为了便携化,我忍了。

在hoekey里面,我一直在用nircmd方法来配置软件

但是随着我对strokeit使用的深入,发现strokeit在调用外部程序的时候,竟然不支持相对路径!

也就是说,在运行程序这栏,必须使用绝对路径

你可以试试直接写 CMD.exe,这是不行的,当然,我们可以写环境变量 %ComSpec%

可执行文件还能用\前导的路径解决

如果是要开TXT文本,strokeit就要在文件栏写 程序文件绝对路径,参数写TXT文本的绝对路径

上面nircmd的例子,strokeit必须要在文件栏写全路径,以\和..前导,可以运行,但是当涉及到比较复杂的路径传递时,就不是很靠谱,如果参数栏里面需要绝对路径,可能会导致调用的程序出错

而且~$folder.nircmd$方法必然要固定文件夹的相对位置,当文件夹位置改变的时候,修改起来比较麻烦

 

最后说一下我现在使用的

方法三:环境变量继承

我的目录结构:
..\hoekey\hyhoekey.bat
..\strokeit

hyhoekey.bat 内容
-----------------------------------------
@ECHO OFF

set "hoekeyDrive=%~d0"
set "hoekeyFolder=%~dp0"
cd /d "%hoekeyFolder%"
set "hoekeyFolder=%cd%"
set "hoekeyplugin=%hoekeyFolder%\plugin"
set "path=%path%;%hoekeyFolder%"

cd..
set "ToolsFolder=%cd%"
set "StrokeItFolder=%cd%\strokeIt"

cd %hoekeyFolder%
start "" "%hoekeyFolder%\hoekey.exe"
start "" "%StrokeItFolder%\strokeit.exe"

exit
-------------------------------------------
稍微解释一下,%~d0是bat所在盘符,%~dp0是bat自身路径
用 %CD% 再次赋值 是为了去掉 %~dp0 最后那个 \
最后要用start调用程序,不使用start会卡住


上面的bat可以自己根据需要修改,加上AHK、EV、TC什么的


该bat启动的程序,都将继承新设定的的环境变量,并且,这些程序调用的程序,也都能够继承
这种方法可以让所有的程序都获得环境变量,只要程序支持环境变量,就可以很方便地获取绝对路径

这种方法不会影响系统环境变量,只影响自己的子进程

只需要修改一个bat,就可以控制所有程序的路径调用
即使文件夹结构发生很大变化,也能很方便地修改


使用这个bat,会有个cmd黑框一闪而过,如果很介意的话,可以用nircmd或者vbs调用隐藏运行。


前面的例子
nircmd execmd ~$folder.nircmd$\plugin\xxx.vbs
用环境变量继承来写:
WScript.exe %hoekeyplugin%\xxx.vbs

最后是strokeit调用vbs的例子:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多