以下批处理脚本应该循环遍历给定目录中的文件。目录包含具有两个扩展名的文件,分别是
.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%%
)
将不胜感激告诉我在批处理脚本中做错了什么。
看起来您正在启动新的 cmd
call set outname
,它不适用于当前的 cmd 终端。尝试不使用“call”:
set outname=%%inname:in=out%%