bat文件c语言,[BATCH] 用.bat文件写函数

如何用批处理文件实现类似下方的 java 代码的效果呢?

public class Demo{

public static int add(int... num){

int rsl = 0;

for(int i : num){

rsl+=i;

}

return rsl;

}

public static void main(String[] args){

System.out.println(add(1,2,3));

}

}

先直接给出代码:

add.bat

@echo off

set /a rsl=0

:do

if {%1}=={} exit /b %rsl%

set /a rsl=%rsl%+%1

shift

goto :do

goto :EOF

demo.bat

@echo off

call add.bat 1 2 3

echo.%errorlevel%

pause

运行 demo.bat 即可得到结果6。

下面讲一下部分指令的作用。

一、exit /b %rsl%

我们直接引用

exit /?

所得到的的信息:

退出 CMD.EXE 程序(命令解释器)或当前批处理脚本。

EXIT [/B] [exitCode]

/B 指定要退出当前批处理脚本而不是 CMD.EXE。如果从一个

批处理脚本外执行,则会退出 CMD.EXE

exitCode 指定一个数字号码。如果指定了 /B,将 ERRORLEVEL

设成那个数字。如果退出 CMD.EXE,则用那个数字设置

过程退出代码。

可以看到,当我们执行

call add.bat 1 2 3

的时候,变量 errorlevel 会被设为 rsl 的值。我们可以通过这种方法获得函数所处理出来的值(仅限整型)。

二、shift

继续通过 shift /? 获取帮助:

更改批处理文件中可替换参数的位置。

SHIFT [/n]

如果命令扩展被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉

命令从第 n 个参数开始移位;n 介于零和八之间。例如:

SHIFT /2

会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。

原本我们调用 add.bat 时,%1、%2、%3会分别设为1、2、3。每当我们将 %1 的值加进 rsl 时,便可用 shift 指令令参数位移,这样便能实现类似 java 的可变参数的效果。

可惜这种方法只能返回整型,若要返回其他种类的数据,可以通过在函数内部定义变量(比如在该例子中,定义 add_rsl),函数执行完后直接在外部调用该变量即可。

以下是例子:

@echo off

call :add 1 2 3

echo.%add_rsl%

pause

goto :EOF

:add

set /a add_rsl=0

:add_do

if {%1}=={} goto :EOF

set /a add_rsl=%add_rsl%+%1

shift

goto :add_do

goto :EOF

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Batch 是一个开源框架,用于大规模处理批处理作业。Spring Batch 提供了多种读数据的方式,包括读取常规文件、XML 文件、数据库和 JMS 消息等。下面是一个 Spring Batch 读取 bat 文件的 demo: 1. 首先需要在 pom.xml 文件中添加 Spring Batch 的依赖: ``` <dependency> <groupId>org.springframework.batch</groupId> <artifactId>spring-batch-core</artifactId> <version>4.3.1</version> </dependency> ``` 2. 创建一个 Job ,在 Job 中定义 Step ,Step 中定义 ItemReader、ItemProcessor 和 ItemWriter。 ``` @Configuration @EnableBatchProcessing public class BatchConfig { @Autowired private JobBuilderFactory jobBuilderFactory; @Autowired private StepBuilderFactory stepBuilderFactory; @Bean public Job readBatFileJob() { return jobBuilderFactory.get("readBatFileJob") .incrementer(new RunIdIncrementer()) .start(readBatFileStep()) .build(); } @Bean public Step readBatFileStep() { return stepBuilderFactory.get("readBatFileStep") .<String, String>chunk(10) .reader(batFileReader()) .writer(consoleItemWriter()) .build(); } @Bean public FlatFileItemReader<String> batFileReader() { FlatFileItemReader<String> reader = new FlatFileItemReader<>(); reader.setResource(new FileSystemResource("path/to/bat/file")); reader.setLineMapper(new PassThroughLineMapper()); return reader; } @Bean public ItemWriter<String> consoleItemWriter() { return items -> { for (String item : items) { System.out.println(item); } }; } } ``` 3. 在 Main 方法中运行 Job。 ``` public class Main { public static void main(String[] args) { SpringApplication.run(BatchConfig.class, args); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值