【问题标题】:Wild cards in bat filesbat 文件中的通配符
【发布时间】:2016-06-01 12:06:47
【问题描述】:

我从需要使用 java 运行的开发人员那里获得定期构建。 xls 文件名每次都会更改(因此我无法对其进行硬编码)。他们最初只是给了我一个bat文件:

pushd "%~dp0"
java -jar KDT.jar 
popd
pause

这会打开一个文件选择器,您可以在其中选择一个文件。由于显而易见的原因,这不会批量工作。所以我把它改成了

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

有点复杂,因为目录名有空格。无论如何,我尝试将这个 BASH 转换为 .bat,并通过一些研究我写了这个(这只是做 echo 的测试,实际上并不是在做 Java,因为 java 需要很长时间,我只是做 echo):

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 是文件的基本名称)。

有什么想法吗?

【问题讨论】:

    标签: batch-file windows-7 wildcard


    【解决方案1】:

    echo %%i 替换为echo %%~fi

    有关更多选项(驱动器、路径、驱动器和路径、扩展名...),请参阅 for /?

    【讨论】:

    • 谢谢。这有效,但它不会让我点击复选标记;-)
    • 回声有效,但是当我使用 java -jar KDT.jar "%%~fi" 时,它说找不到文件。使用不带引号,仅 %%~fi 只查看空格右侧的最后一部分。一定有什么我没有正确使用引号?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    相关资源
    最近更新 更多