bat 文件中的通配符
Wild cards in bat files
我从开发人员那里得到定期构建,需要 运行 和 java。 xls 文件名每次都会更改(因此我不能对它们进行硬编码)。他们最初只是给了我一个 bat 文件:
pushd "%~dp0"
java -jar KDT.jar
popd
pause
这会打开一个文件选择器,您可以在其中 select 一个文件。出于显而易见的原因,这不会批量工作。所以我把它改成了
pushd "%~dp0"
java -jar KDT.jar "../test data/sprint3/fil1.xls"
java -jar KDT.jar "../test data/sprint3/fil2.xls"
...
java -jar KDT.jar "../test data/sprint4/fil1.xls"
java -jar KDT.jar "../test data/sprint4/fil2.xls"
popd
但正如我所说,文件名会改变(但目录不会)。在 Linux/Unix 我会做类似
for fil in ../test*/*.xls
do
java -jar KDT.jar $fil
done
有点复杂,因为目录名有一个space。无论如何,我试图将这个 BASH 转换为 .bat 并通过一些研究我写了这个(这只是做回声的测试,实际上并没有做 Java 因为 java 如此很长一段时间我只是回声):
pushd "%~dp0"
for %%i in ("../test data/sprint3/*.xls") do (
echo %%i
)
for %%i in ("../test data/sprint3/*.xls") do (
echo %%i
)
@echo STOP
popd
问题是这只是回显文件的基本名称(即没有目录名):
01.1v1.06_VK_210516.xls
01v1.03_SR_190516.xls
1.02_v0.09_SR_200516.xls
...
当我用 Java 尝试时,它是同样的问题,它在当前目录中找不到文件。我希望将通配符结果作为完整路径名,例如 ../test data/sprint3/01.1v1.06_VK_210516.xls (从我看来,尽管反斜杠 () 用于分隔路径目录中的名称,.bat 文件似乎(另外)接受前斜杠 (/))。
如何获取通配符中的完整(相对)目录名?我想从 C:/ 开始的完整路径也是可以接受的。如果没有明确的方法来做到这一点,那么也许在每个 for 语句中我可以手动连接文件名,但我不确定该怎么做(在 BASH 中它会像 full= ".. /test data/sprint3/$base"(其中 base 是文件的基本名称)。
有什么想法吗?
将 echo %%i
替换为 echo %%~fi
。
请参阅 for /?
了解更多选项(驱动器、路径、驱动器和路径、扩展名……)
我从开发人员那里得到定期构建,需要 运行 和 java。 xls 文件名每次都会更改(因此我不能对它们进行硬编码)。他们最初只是给了我一个 bat 文件:
pushd "%~dp0"
java -jar KDT.jar
popd
pause
这会打开一个文件选择器,您可以在其中 select 一个文件。出于显而易见的原因,这不会批量工作。所以我把它改成了
pushd "%~dp0"
java -jar KDT.jar "../test data/sprint3/fil1.xls"
java -jar KDT.jar "../test data/sprint3/fil2.xls"
...
java -jar KDT.jar "../test data/sprint4/fil1.xls"
java -jar KDT.jar "../test data/sprint4/fil2.xls"
popd
但正如我所说,文件名会改变(但目录不会)。在 Linux/Unix 我会做类似
for fil in ../test*/*.xls
do
java -jar KDT.jar $fil
done
有点复杂,因为目录名有一个space。无论如何,我试图将这个 BASH 转换为 .bat 并通过一些研究我写了这个(这只是做回声的测试,实际上并没有做 Java 因为 java 如此很长一段时间我只是回声):
pushd "%~dp0"
for %%i in ("../test data/sprint3/*.xls") do (
echo %%i
)
for %%i in ("../test data/sprint3/*.xls") do (
echo %%i
)
@echo STOP
popd
问题是这只是回显文件的基本名称(即没有目录名):
01.1v1.06_VK_210516.xls
01v1.03_SR_190516.xls
1.02_v0.09_SR_200516.xls
...
当我用 Java 尝试时,它是同样的问题,它在当前目录中找不到文件。我希望将通配符结果作为完整路径名,例如 ../test data/sprint3/01.1v1.06_VK_210516.xls (从我看来,尽管反斜杠 () 用于分隔路径目录中的名称,.bat 文件似乎(另外)接受前斜杠 (/))。
如何获取通配符中的完整(相对)目录名?我想从 C:/ 开始的完整路径也是可以接受的。如果没有明确的方法来做到这一点,那么也许在每个 for 语句中我可以手动连接文件名,但我不确定该怎么做(在 BASH 中它会像 full= ".. /test data/sprint3/$base"(其中 base 是文件的基本名称)。
有什么想法吗?
将 echo %%i
替换为 echo %%~fi
。
请参阅 for /?
了解更多选项(驱动器、路径、驱动器和路径、扩展名……)