为什么我的批处理脚本无法循环执行java程序?

问题描述 投票:0回答:1

以下批处理脚本应该循环遍历给定目录中的文件。目录包含具有两个扩展名的文件,分别是

.in
.out
。例如,有一个
dog.in
文件和
dog.out
文件。该目录中有多个此类文件对。每个文件仅包含 3-4 行文本。

然后是一些 java 程序,它应该获取单个

.out
文件作为输入参数,并使用 java exec 命令中的
.in
将单个
<
文件重定向到标准输入。

如果批处理脚本仅适用于一对文件的单个 java exec,则可以正常工作,如下所示。

@ECHO OFF
cd e:\WORK\NetBeansProjects\potyczki
pwd
set infname=D:\___Potyczki_Algorytmiczne\2024\mro_tests\mro1k.in
set outfname=D:\___Potyczki_Algorytmiczne\2024\mro_tests\mro1k.out
java -classpath target/classes/ pl.kazanik.potyczki._2024.Mrowki %outfname% < %infname%

当批处理脚本更改为循环遍历目录中的文件,并为循环中的每对文件执行 java 程序时,会抛出错误,告诉您

Cannot find file given file
。该错误发生在批处理脚本中,在 java 程序执行开始之前。我知道这一点,因为作为 java 程序主方法中的第一行,我有打印消息,该消息在执行批处理时不存在于输出中。只有上面的错误消息,为目录中的每个文件对打印(因此对于 for 循环的每次迭代)。

@echo off
setlocal
cd e:\WORK\NetBeansProjects\potyczki
pwd
set testdir=D:\___Potyczki_Algorytmiczne\2024\mro_tests
for %%f in (%testdir%\*.in) do (
  set inname=%%f
  call set outname=%%inname:in=out%%
  call java -classpath target/classes/ pl.kazanik.potyczki._2024.Mrowki %%outname%% < %%inname%%
)

将不胜感激告诉我在批处理脚本中做错了什么。

java batch-file
1个回答
0
投票

看起来您正在启动新的 cmd

call set outname
,它不适用于当前的 cmd 终端。尝试不使用“call”:

 set outname=%%inname:in=out%%
© www.soinside.com 2019 - 2024. All rights reserved.