1

我对批处理文件编程完全陌生,所以如果这很明显,请原谅我。假设我在TheFileToPassc:\some\path\someFile.extension中存储了一个字符串,并且我正在从同一个批处理文件中调用另一个 exe,这样我应该只传递从TheFileToPass中扣除的文件名(即someFile)。

我正在尝试做的伪代码:

字符串 TheFileToPass = "c:\some\path\someFile.extension"

调用 external_tool.exe TheFileToPass.GetFileNameWithoutExtension()

通过在线搜索,我知道%~nI可以解决问题,但是如何在TheFileToPass变量上使用它?我尝试了以下方法,但没有任何效果:

echo %%~TheFileToPass

echo %%~n%TheFileToPass%

编辑

好的,我会尝试更具描述性。我在我们的批处理文件中定义了几个“局部变量”:

set someFlag1=
set someFlag2=
set someFile=

然后我解析命令行参数并将它们放在上面声明的变量中。批处理文件可以具有可变数量的命令行参数,因此值的位置可以根据一些预定义的规则而变化。简而言之,我们无法确定 %1、%2、%3 (等等)哪一个将始终具有文件路径。无论如何,根据预定义的规则,我们解析命令行参数(使用 SHIFT 循环技术)并将该信息保存在我们的变量中:someFlag1、someFlag2 和 someFile。

现在,someFile 包含文件的完整路径,例如:“c:\some\path\file.txt”。我们希望调用一个外部 exe 并将文件名从 someFile 变量(在本例中为“file”)的内容传递给它。

那么我们对只从全路径获取文件名的“someFile”变量进行什么操作呢?

4

3 回答 3

1

您说您正在使用 shift 遍历批处理文件的参数以获取文件名。所以在某个时刻,你会得到一些东西

set "someFile=%~1"

然后,您需要添加的只是提取文件名以供以后使用

set "onlyFileName=%~n1"
于 2013-11-01T09:13:53.090 回答
0

这取决于您如何将文件传递给批处理文件。

您可以在命令行上传递并使用 %~dpn1(您需要路径),或者如果硬编码传递给 bat 中的函数并使用相同的 %~dpn1。

类型

call /?
set /?
于 2013-11-01T06:33:58.033 回答
0
for %f in ("%TheFileToPass %") do call external_tool.exe %~nf.GetFileNameWithoutExtension()
于 2013-11-01T06:40:41.130 回答