【问题标题】:Get absolute path of a file using batch script使用批处理脚本获取文件的绝对路径
【发布时间】:2019-06-17 16:11:13
【问题描述】:

我有一个 Java 应用程序,它使用批处理脚本生成一个存储在 myfile.txt 文件中的输出。现在我想将这个myfile.txt 文件的绝对路径作为命令行参数传递给另一个java 应用程序。

比如:

java -jar "path/to/jar/MyJar.jar" > myfile.txt

<Something to get and store absolute path of myfile.txt>

java -jar "path/to/jar/MyOtherJar.jar" <absolute path of myfile.txt>

现在我发现this answer 声明了%~dpnx1 的使用,但我不明白如何应用它。有什么建议吗?

【问题讨论】:

  • 如果您在当前目录中创建文件,则可以使用 $PWD 获取当前直接路径。然后你只需要将文件名与它连接起来。
  • MyOtherJar 文件位于单独的目录中。它与myfile.txt不在同一目录中。

标签: windows batch-file


【解决方案1】:

使用%~dpnx1 或简单的%~f1 语法要求文件名包含在参数中。
dpnx=(D)rive (P)ath (N)ame e(X)tension = Full(F)ilename

这可以通过CALL :func &lt;argument&gt;FOR 完成。

call :getAbsolutePath resultVar "myFile.txt"
echo %resultVar%
exit /b


:getAbsolutePath <returnVar> <filename>
set "%1=%~f2"
exit /b

或通过FOR

FOR /F "delims=" %%X in ("myFile.txt") DO set "absPath=%%~fX"

【讨论】:

  • 这很好用。你能告诉我%%~fX在这里有什么用吗?另外,有什么办法可以避免生成这个myfile.txt 并将MyJar 的输出直接传递给MyOtherJar?我这样做是因为我对语法不是很熟悉。如果有办法消除这个额外的文件生成步骤?
  • %%~fX 使用FOR 参数%%X 和修饰符~f 来获取绝对文件名。
  • @jackw 为了避免你的临时文件,可能管道可以工作java -jar "path/to/jar/MyJar.jar" | java -jar "path/to/jar/MyOtherJar.jar",但它是否工作取决于 jar 文件
  • 虽然标准的for 循环就足够了,但为什么要使用for /F 循环?
  • @aschipfl 没有明确的原因,这只是一种习惯
猜你喜欢
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 2014-01-15
  • 1970-01-01
相关资源
最近更新 更多