首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

批处理动态生成脚本或文件

在编写BAT脚本的过程中经常遇到类似这样的需求:

动态生成一个VBS脚本或PowerShell脚本,并在后续的BAT代码里面进行调用。

动态生成一个SQL文件,并在后续的BAT代码里面连接到数据库再执行它。

动态生成一个BAT脚本,并在后续的BAT代码里面连接远程Windows服务器再执行它。

动态生成一个Shell脚本,并在后续的BAT代码里面连接远程Linux服务器再执行它。

动态生成一个配置文件,并在后续的BAT代码里面进行软件的自动化静默安装。

当需要生成的文本内容比较简单的时候,可以直接使用 echo 命令重定向来实现,例如:

@echooff

> SubScript.vbsechomsgbox "bbs"

>>SubScript.vbsechomsgbox "bathome"

>>SubScript.vbsechomsgbox "net"

这里有个小技巧,把多次重定向写入文件的操作合并成一次操作,可以提高代码执行效率,例如:

@echooff

>SubScript.vbs (

echomsgbox "bbs"

echomsgbox "bathome"

echomsgbox "net"

)

使用 echo 命令重定向这个方案有一个问题需要注意,如果待生成的文本内容包含百分号、大于号、小于号、管道符号以及其它特殊字符的时候,需要进行转义。其中,百分号使用 % 进行转义,其它特殊字符使用 ^ 进行转义:

@echooff

> SubScript.batechoecho bbs ^|msg %%username%% /time:2

>>SubScript.batechoecho bathome ^|msg %%username%% /time:2

>>SubScript.batechoecho net ^|msg %%username%% /time:2

如果需要动态生成的文本内容比较长,尤其是包含很多特殊字符的情况下,使用 echo 命令重定向这种方案会比较麻烦,而且也不利于代码的后期维护。可以使用另外一个方案来实现这个功能:

@echooff

for/f"delims=:"%%i in('findstr /n "^:DynamicScript$" "%~f0"')do(

more+%%i"%~f0">SubScript.bat

)

goto:eof

REM 请确保待生成的文本位于脚本的末尾

:DynamicScript

@echo off

echo bbs | msg %username% /time:2

echo bathome | msg %username% /time:2

echo net | msg %username% /time:2

代码的思路是,把待生成的文本放到一个指定的标签下面,用 findstr 命令获取这个标签在该脚本的第几行,再用 more 命令把该行下面的内容重定向输出到文件。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180717G0VJ3000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券