batch print pro_研之有效 | 高效编程之Batch批处理程序
前言
常言道:“工欲善其事,必先利其器”。要有效率地开展科研工作,不仅需要持续投入时间和热情,还有必要掌握好文献管理、数据处理与分析以及团队合作等各项技能。一款好的软件能大幅提高科研生产力,善用各类软件处理重复性工作,有助于事半功倍地完成科研任务和事务,从而将更多时间用于思考。对于以建模为重要科研工作内容的科研人员而言,掌握相应的编程语言、文本编辑器和代码管理等软件无疑能极大提高工作效率;而对于较少涉及建模或代码维护的研究人员而言,掌握数据分析与可视化软件、计算机系统设置以及高效文件管理方式,也能大幅提高生产力。
基于此,我们根据课题组长期以来的探索和实践,总结了有助于提高个人和团队科研生产力的各类软件使用方法和学习资源,并以系列推送的方式推出,以期对读者有所启发。系列推送包括三个部分:(1)高效编程,介绍提高建模和数据分析效率的常用程序语言,如Batch批处理、LaTex、Linux与Cygwin、R语言以及文本编辑器,本课题组开发的IMED模型就是深度糅合各种编程语言和工具构建的超复杂系统;(2)高效利器,介绍适用于个人办公提效的实用小工具,如各种作图软件、快捷操作开源软件、文献管理利器Endnote和资源管理利器Total Commander;(3)高效协作,介绍适用于团队管理和协作的各种解决方案,如资料存储FTP、代码版本管理的Github、云硬盘坚果云、以及团队协作平台Teambition等。读者可在公众号→科研拾贝→研之有效栏目中阅读全部内容。
借此机会,我们向这方面的几位引路人致以崇高的敬意,包括善用佳软的作者张玉新、R语言社区的谢益辉和赵鹏,感谢他们付出大量时间精力创作无数篇文风风趣而又干货满满的博文,无私分享国内外开源软件、开发R实用包、推广R语言,为我们打开了一扇开源与分享之门。此外, Stack Overflow网站也是一盏藏龙卧虎的指明灯。最后,我们希望本系列推送能起到“抛砖引玉”之效,激励读者高效工作、快乐科研。
——北京大学LEEEP研究组
第二期:Batch批处理程序学习
本期导读
批处理程序指的是预先写好的一系列命令行代码,可以帮助我们实现自动顺序调用多种应用程序执行命令或相应代码,进行运行模型和结果分析作图等操作。bat程序是dos环境(Disk Operating System,磁盘操作系统)下的、可在Windows系统下运行的批处理文件。掌握批处理程序可以帮助我们事半功倍地调试模型、自动运行连贯的结果分析与展示等步骤,提高建模分析效率。本文主要介绍批处理文件Batch的基本内容。
本文约2000字,阅读完需要约8分钟
Part 1 什么是bat
bat文件是dos下的批处理文件。批处理文件的扩展名为 .bat 或 .cmd,其中包含一条或多条命令(可包含对其他程序的调用),可以使用DOS下的Edit、Windows的记事本、文本编辑器Notepad++或Sublime Text等任何文本文件编辑工具创建和修改。在命令提示下输入批处理文件的路径或名称,或者双击批处理文件,系统就会调用cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。
在建模研究中,批处理文件的强大功能就体现在其可以实现对不同应用程序和不同编程语言脚本的依次调用。因此,使用bat文件预先编写好整个研究所涉及的各个程序分析步骤(例如:首先调用R脚本进行数据预处理、接着调用GAMS脚本运行主模型、最后调用R或其他语言进行模型结果的分析和可重复性报告编撰),将能够实现分析过程的自动化和分析程序的通用性(具体可参考本文“3.调用其他程序语言”部分)。
Part 2 基本语句总结
1
@echo off/echo on
“echo”用来在控制台上显示信息, 此命令意为关闭/开启对所运行语序的显示。
2
set
set 不带任何参数: 将显示当前用户的所有系统环境变量。(set)
set带一个变量名: 尝试搜索并显示以这个变量名开头的环境变量。(运行语句:set PROCESSOR,就会返回以PROCESSOR开始的变量)
3
REM and Arguments
REM [comment]: 批处理文件的注释符,可以使用“::” 来代替REM。
4
call
从一个批处理程序调用另一个批处理程序,并且不终止批处理程序。call命令接受用作调用目标的标签。如果在脚本或批处理文件外使用call,它将不会在命令行起作用。
5
cd
cd是change directory(改变目录,或者可以写作CHDIR)的缩写,主要作用是改变当前提示符盘符路径或提示符目录路径。想要进入某个盘符或目录下,可以使用此命令来实现。
6
Chcp 65001
此命令可使bat文件可以UTF-8编码,可以识别中文,否则为乱码。
7
goto 跳转命令
goto label REM 跳转到指定的标签那一行label REM 行首为:表示该行是标签行,标签行不执行操作
8
md
md abc REM 在当前目录里建立子目录 abc md d:/a/b/c REM 如果 d:/a 不存在,将会自动创建
9
del
del d:/test.txt REM 删除指定文件,不能是隐藏、系统、只读文件del *.* REM 删除当前目录里的所有文件,不包括隐藏、系统、只读文件,要求按 Y 确认del /q/a/f d:/temp/*.* REM 删除 d:/temp 文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录del /q/a/f/s d:/temp/*.* REM 删除 d:/temp 及子文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录
10
rd
rd abc REM 删除当前目录里的 abc 子目录,要求为空目录rd /s/q d:/temp REM 删除 d:/temp 文件夹及其子文件夹和文件,不需要按 Y 确认REM rd与del的区别为,一般来说del是删除文件的,rd是删除文件夹的、如果要连同内部文件一起删要用rd /s
11
start
start 打开某一应用程序(并提供路径参数)
- 使用IE浏览器打开某网站: iexplore.exe http://XXX(网站地址) - 打开 word: start winword FileLocation\ Filename.docx
12
%~dp0
%0代表文件本身,d代表盘符,p代表路径
如:echo %~dp0 REM即显示当前文件路径,
此外,扩展的选项还包括:
%~f0:完整的路径+文件名
%~n0:文件名(无扩展名)
%~x0:文件扩展名
%~s0:扩充的路径只含有短名(“s”为Short,短的)
%~a0:将 %0 扩充到文件的文件属性(“a”为attribute,即属性)
%~t0:将 %0 扩充到文件的日期/时间(“t”time)
%~z0:将 %0 扩充到文件的大小(Size 大小)
13
help
直接在小黑窗输入“help 所要查找的命令”,即可出现相应的解释和用法,如“help rd”即显示当前目录名或改变当前目录(图1)。
图1 用help来查找相关语句
Part 3 调用其他程序语言
Bat作为一门脚本语言,能够调用多种程序执行相关命令,如GAMS、R、Python、LaTex等,还可以通过设置全局变量并设置判断语句来巧妙控制程序是否调用(如set runR=on或onf ,控制“本次分析中是否需要执行‘运行R脚本’一步”),实现不同软件的集成控制。
熟练掌握并运用Bat脚本,对于模型调试、模型运行和结果分析都将有很大的帮助。通过预先设置好环境变量,bat可以调用多种程序实现模型调试和分析,添加环境变量的方法见上期推送:研之有效 | 高效编程之环境变量。
1
Bat调用GAMS语言
以GAMS语言建立好经济模型或者能源系统模型后,通过Bat脚本对GAMS进行调用能够更加方便地进行模型调试。调用的命令如下:
gams 文件路径\example.gms --希望传递给GAMS的参数名称=参数值(其中,gams是安装好GAMS软件后,位于其安装路径下的一个用于启动GAMS程序并运行GAMS脚本的.exe应用程序)
2
Bat调用R语言
对模型进行调试完毕并计算出结果后,常常需要对结果进行分析和作图,此时使用Bat脚本语言就能调用R语言,进行规范化处理和批量作图。调用命令如下:
Rscript 文件路径\example.r(其中,Rscript是安装好R软件后,位于其安装路径下的一个用于启动R程序并运行R脚本的.exe应用程序)
3
Bat调用其他编程语言或程序
Bat还能调用其他语言,诸如Python、LaTex等,实现方式完全类似上述对GAMS、R的调用方法。通过灵活运用Bat对程序的调用,我们能够快速、高效地完成系列操作。
Part 4 Bat程序的运行
1
双击运行
程序运行完毕后小黑窗会自动消失,不利于后续代码调试,不推荐此运行方法。
2
在Notepad++中运行
“文件”选项卡-“打开所在文件夹”-“命令行”,选择某一bat文件并运行。
更好的方式是在“运行”选项卡将“运行当前bat文件”的命令(cmd /k chdir /d "$(CURRENT_DIRECTORY)" & "$(FILE_NAME)" &pause)保存为某一快捷键,每次通过这一快捷键运行Bat程序。
Part 5 延伸资料
除Batch外,Windows系统下PowerShell是更强大的批处理语言,Linux系统下的Shell也有类似功能,且在文字处理等正则表达式方面更为强大。
Part 6 学习资料
1
更多的bat详细命令可以参考
http://www.cnblogs.com/linglizeng/archive/2010/01/29/Bat-CMD-ChineseVerion.html
2
Windows批处理命令及编写批处理文件:
https://www.jianshu.com/p/7413ba117fed
3
批处理符号简介
http://xstarcd.github.io/wiki/windows/windows_cmd_summary_symbols.html
4
批处理命令简介
http://xstarcd.github.io/wiki/windows/windows_cmd_summary_commands.html
敬请关注公众号了解LEEEP组研究动态
IMED研究 / 研之有效/ 讲座会议 / 工作机会
编辑:陆潘涛 吴雅珍
排版:胡卉然
相关阅读
1 IMED综合评估模型体系介绍
2 招聘 | 北京大学能源环境经济与政策研究组博士后招聘公告
3 研之有效 | 高效编程之添加环境变量
4 文献阅读 | 中国碳定价的空气质量协同效益
5 文献阅读 | 贸易驱动的中国空气污染和健康影响迁移
6 文献阅读 | 巴黎协定下空气质量改善对健康和农业的协同效益
7 文献阅读 | 中国非CO2温室气体:排放路径、减排选择与潜力
8 文献阅读 | 全球主要粮食产区同时减产的风险评估
点击“阅读原文”浏览小组主页
batch print pro_研之有效 | 高效编程之Batch批处理程序相关推荐
- Python高效编程之88条军规(2):你真的会格式化字符串吗?
目录 1. C风格的字符串格式化方式 2. 内建format函数与str.format方法 3. f-字符串 总结: 在微信公众号「极客起源」中输入595586,可学习全部的<Python高效 ...
- 网络编程之TCP客户端程序开发
网络编程之TCP客户端程序开发 1. 开发 TCP 客户端程序开发步骤 2. socket 类的介绍 3. TCP 客户端程序开发示例代码 4. 小结 1. 开发 TCP 客户端程序开发步骤 创建客户 ...
- python itertools模块位置_Python高效编程之itertools模块详解
0 前言 说到处理循环,我们习惯使用for, while等,比如依次打印每个列表中的字符:lis = [ I , love , python ] for i in lis: print(i) I lo ...
- Python高效编程之88条军规(1):编码规范、字节序列与字符串
目录 军规1:遵循PEP 8样式指南 军规2:了解字节序列(bytes)和字符串(str)的差异 用编程语言写代码是自由的,编译器不会强制你使用特定的格式编写程序(只要符合语法,编译器才不管你呢!). ...
- 告别996,开启Java高效编程之门
教程介绍 所谓"武以快为尊,天下武功唯快不破".本课程剑指Java高效编程,致力于从"技术"和"工具"两大 维度提高编程效率,帮助广大程序员 ...
- 高效编程之HashMap的entryset和keyset比较
最近看了一点spring的源码,甚是苦涩:对spring稍微有了点整体的认识,但对很多细节的地方还是懵逼啊...太多不懂了的,只能慢慢去读,先把简单的不懂的解决: 比如beanfactory通过扫描器 ...
- 聊聊我的高效编程之路
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:在程序开发过程中,一些IDE的配置.常用代类的积累以及常用框架的使用.能帮助我们迅速写好 ...
- Java高效编程之Builder模式
前言 在<Effective Java 第2版>中有提到,遇到多个构造器参数时要考虑使用构建器(Builder模式).相比于重叠构造器(telescoping constructor)模式 ...
- Java 高效编程之 Builder 模式
前言 在<Effective Java 第2版>中有提到,遇到多个构造器参数时要考虑使用构建器(Builder模式).相比于重叠构造器(telescoping constructor)模式 ...
最新文章
- linux远程脚本事例,ssh远程执行命令方法和Shell脚本实例
- RDMA技术详解(二):RDMA Send Receive操作
- tomcat 部署 RESTful 服务实例
- windows10下配置环境变量
- oracle rac 节点启动,Oracle 10g RAC 节点自动重启故障处理
- (转)[Android分享] Android中用Ant把ndk的so文件打包进apk
- CCNA-第十篇-VLAN-下
- java中的多线程的示例
- TensorFlow2.0 —— 模型保存与加载
- windows连接远程桌面
- Bootstrap Datatable 简单的基本配置
- java servlet 学习_java学习之web基础(1):Servlet
- php简单选择题,念做个简易php选择题答题系统
- python第二天3.1
- python time、datetime模块学习使用
- python音乐推荐系统的设计与实现_基于协同过滤的音乐推荐系统
- 具有万有引力加速机理的布谷鸟搜索算法
- openlayers2渐变色渲染
- 转载-公历转换农历VB示例
- VPLS原理+两个实验