将字符串回显到批处理,转义特殊字符

时间:2015-10-27 17:25:45

标签: windows batch-file cmd escaping echo

我们与Microsoft签订了在家工作协议,允许用户在家中使用Office 2010(仅限工作用途)。

为了防止许可证代码被人知道,我设计了一种方法来自动化他们的激活请求,而不需要我的交互。

安装完成后,我选择了

@Echo Off
SETLOCAL
REM Check for Installation
if not exist "c:\Program Files (x86)\Microsoft Office\Office14\" goto NoSoftware
if not exist "c:\Program Files\Microsoft Office\Office14\" goto NoSoftware
GOTO CheckArchitecture
REM -----------------------------------------------------------------
:NoSoftware
*This section intentionally blank for further development*
REM -----------------------------------------------------------------
:CheckArchitecture
REM Check architecture
if exist "c:\Program Files (x86)" goto x64
Cscript c:\"Program Files (x86)"\"Microsoft Office"\Office14\ospp.vbs /inpkey:KEY-GOES-HERE
Cscript c:\"Program Files (x86)"\"Microsoft Office"\Office14\ospp.vbs /act
GOTO CreateDelMAK
REM -----------------------------------------------------------------
:x64
Cscript c:\"program files\Microsoft Office"\Office14\ospp.vbs /inpkey:KEY-GOES-HERE
Cscript c:\"program files\Microsoft Office"\Office14\ospp.vbs /act

可以创造奇迹。

现在由于密钥只是包含在批处理文件中,因此很容易获得,因此需要对其进行掩盖。为此,我选择将批处理转换为EXE,以便可以在其计算机上执行,并且不能简单地查看该文件以获取许可证代码。

很好,一切都运行良好,但EXE将在安装完成后留在他们的机器上,然后可以重新运行或重新分发,从而违反许可协议。

在解决方案时,我将以下几行(从上面开始)添加到激活批处理脚本中;

REM -----------------------------------------------------------------
:CreateDelMAK
echo @Echo OFF > DeleteMAK.bat
echo CLS >> DeleteMAK.bat
echo Timeout 8 >> DeleteMAK.bat
echo DEL OfficeMAK.exe >> DeleteMAK.bat
echo (goto) 2>nul & del "%~f0" >> DeleteMAK.bat
REM -----------------------------------------------------------------
START DeleteMAK.bat
SET OfficeMAK=OfficeMAK.exe
TASKKILL /IM "%OfficeMAK%"

我通过goto阅读了dbenham关于(goto) 2>nul & del "%~f0"技巧的How to make .BAT file delete it self after completion?帖子,但我可以在DeleteMAK.bat的末尾使用它,这样它就会自我-destruct一旦处理完毕。除格式化之外,上面给出了以下一个闪亮的新批处理文件;

Echo OFF
CLS
Timeout 5
DEL OfficeMAK.exe

我的问题,因为我确信你们都可以从上面看到,我无法让原始脚本回显(goto) 2>nul & del "%~f0"到新文件,所以一旦过程完成,{{ 1}}仍然存在,而且它只是草率。

进一步阅读产生的特殊字符需要转义,所以我选择了;

DeleteMAK.bat

最初,最后转到;

echo (goto) 2^>nul & del "%~f0" >> DeleteMAK.bat

你可以从我相当复杂的方法中说出我不是一个非常精通的编码器!我使用stackoverflow搜索已经做得相当远,我觉得我几乎就在那里,但我无法解决它。

拜托,噢,请你们这些非常有才能的人能让我摆脱苦难吗?我永远感激不尽!

0 个答案:

没有答案